我使用套接字编写了一个非常简单的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/