windows - python “TypeError: getsockaddrarg: AF_INET address must be tuple, not int”中的socket()函数元组错误

标签 windows python-3.x sockets networking tuples

我试图编写一个简单的python代码,用于在服务器端和客户端之间发送/接收消息。当我将计算机定义为服务器时,出现以下错误。有趣的是,相同的代码可在另一台PC上运行。

服务器代码:

import socket

s = socket.socket()
host = '10.1.1.25' # static ip of the server pc
port = 5001
s.bind(5)
c, addr = s.accept()
print("Got connection from", addr)
while True:
   c.send("Server please type").encode()
   print("From Server :", c.recv(4096))

c.close()

我收到此错误:
   s.bind(5)
TypeError: getsockaddrarg: AF_INET address must be tuple, not int

我用 s.bind((host,port))替换了 s.bind(5),然后出现此错误:
   fd, addr = self._accept()
OSError: [WinError 10022] An invalid argument was supplied

客户代码:
import socket

s=socket.socket()
host="10.1.1.25"
port=5001
s.connect((host,port))

while True:
    try:
        print("from server:",s.recv(4096))
        s.send(input("write something").encode())
    except:
        break
s.close()

注意:我在Windows 8.1上遇到了这些错误,但是在Windows 10上可以使用
客户端示例代码适用于我尝试过的每台计算机

谢谢你的帮助。根据您的建议,我修改了我的代码,如下所示:
import socket

s = socket.socket()
host = '10.1.1.25'
port = 5001
s.bind((host,port))
s.listen(5)
c,addr=s.accept()
print("Got connection from", addr)
while True:
    c.send(input("Server please type").encode())
    print("From Server :", c.recv(4096))
s.close()

现在它可以在本地IP上运行(当我调整为127.0.0.1时),并且我可以在一台计算机上自行通信。即使当我尝试与第二台计算机通信时,我也没有收到任何错误但没有任何输出

最佳答案

服务器必须先监听,然后才能接受传入的连接。因此正确的顺序是:

s = socket.socket()
host = '10.1.1.25' # static ip of the server pc
port = 5001
s.bind((host, port))
s.listen(5)
end = False
while not end:
    c, addr = s.accept()
    # process c incoming connection from addr, optionaly set end = True
s.close()

关于windows - python “TypeError: getsockaddrarg: AF_INET address must be tuple, not int”中的socket()函数元组错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45418550/

相关文章:

sockets - 使用 SIOCGIFINDEX 获取接口(interface)索引时出错

java - 我可以使用selenium网格在node.json中指定webdriver.gecko.driver吗?

windows - 调用 kernel32.dll 函数时获取调用堆栈

python - 在 Python 中更新 CSV 文件

python - 如何在Python请求模块中获取响应URL?

python - 调用变量时运行进程

windows - 什么是 SO_SNDBUF 和 SO_RCVBUF

c++ - 基于 PUBLICKEYBLOB/PRIVATEKEYBLOB 生成 session key

c++ - 每个初创公司都会创建名为 Ya 的奇怪文件 - 我认为与 Visual Studio 有关......它是什么以及如何阻止这种情况发生?

c++ - 发送套接字结果 0x000000be