【问题标题】:Python OSError: [WinError 10022] An invalid argument was supplied | fd, addr = self._accept()Python OSError:[WinError 10022] 提供了无效参数 | fd, addr = self._accept()
【发布时间】:2020-05-23 18:38:48
【问题描述】:

我正在尝试用 Python 制作一个简单的客户端和服务器。服务器似乎完全没问题,但客户端抛出以下错误:

  File "C:\Users\me\Desktop\Client.py", line 6, in <module>
    connection, address = client.accept()
  File "C:\Users\me\AppData\Local\Programs\Python\Python38-32\lib\socket.py", line 292, in accept
    fd, addr = self._accept()
OSError: [WinError 10022] An invalid argument was supplied

这是服务器代码:

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((socket.gethostname(), 8080))
server.listen(5)

while True:
    connection, address = server.accept()
    fromClient = ''

    while True:
        data = connection.recv(2048)
        if not data:
            break
        fromClient = fromClient + data
        print(fromClient)
        connection.send(str.encode('yo'))
    connection.close()
    print('client disconnected')

这是客户端代码:

import time
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((socket.gethostname(), 8080))
client.settimeout(3)
time.sleep(3)
#client.send(str.encode('client'))
connection, address = client.accept()
fromServer = client.recv(2048)
fromServer = fromServer.decode('utf-8')
client.close()
print(fromServer)

服务器绑定到 ip 和端口,所以它们没问题,但是客户端在尝试相同的事情时出错。有什么办法可以解决这个问题吗?

我也试过在 client.accept() 行之前睡觉,但没有奏效。

【问题讨论】:

    标签: python windows sockets server client


    【解决方案1】:

    您正在调用listen 未设置为被动模式的客户端套接字上的accept 方法。此外,套接字已经处于连接状态(之前调用了connect),现在你不能指望你的套接字监听和接受连接。但长话短说,只需删除您在客户端调用 accept 的代码,它就可以正常运行。

    【讨论】:

    • @mwolfe 了解您应该如何接受答案以及您需要发布哪些 cmet accepting-answers。由于您是 stackoverflow 社区的新手,请刷新该链接
    猜你喜欢
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    • 2022-01-07
    • 2020-12-30
    • 2017-03-19
    • 2016-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多