python - TypeError : getsockaddrarg: AF_INET address must be tuple,未列出

标签 python sockets

我使用套接字编写了一个非常简单的python服务器程序。但是我收到了上面提到的错误。我不知道我做错了什么。该代码是

import socket
ms=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
ainfo=socket.getaddrinfo('127.0.0.1',1234)
ms.bind(ainfo)
ms.listen(5)
while True:
    conn, addr=ms.accept()
    data=ms.recv()
    if not data:
        break;
    ms.sendall(data)
conn.close()
ms.close()

错误是
Traceback (most recent call last):
  File "server.py", line 4, in <module>
    ms.bind(ainfo)
TypeError: getsockaddrarg: AF_INET address must be tuple, not list

最佳答案

您需要传递ainfo[0][4]而不是ainfo。因为ainfo是一个元组列表。 socket.getaddrinfo('127.0.0.1',1234)返回

[(<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('127.0.0.1', 1234)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_DGRAM: 2>, 17, '', ('127.0.0.1', 1234)), (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_RAW: 3>, 0, '', ('127.0.0.1', 1234))]

因此,您需要使用索引ainfo [0] [4]来访问ip和端口。

或者,您可以直接使用ms.bind(('127.0.0.1',1234))

关于python - TypeError : getsockaddrarg: AF_INET address must be tuple,未列出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44580428/

相关文章:

javascript - CGI/Python服务器推送

python - sqlalchemy 检查对象是否在模型中

c++ - Boost::ASIO - 如何使用 2 个线程来处理接收和发送消息

python - 如何将数据帧中的单个值输出到 CSV?

python - 如何在 torch 张量中交换轴?

c++ - 无法分配请求的地址,C++ UDP 套接字

c - 在 Linux 上使用 TCP 进行文件传输

delphi - TCPServer发送html到浏览器

c# - 如何检查 TcpClient 连接是否关闭?

python - 一次处理多个按键