【问题标题】:Python Server Client WinError 10057Python 服务器客户端 WinError 10057
【发布时间】:2023-03-31 11:00:02
【问题描述】:

我正在使用socket 模块在 Python 3.3 中创建服务器和客户端。我的服务器代码工作正常,但此客户端代码返回错误。代码如下:

import socket
import sys
import os

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
server_address = ('192.168.1.5', 4242)
sock.bind(server_address)

while True:
    command = sock.recv(1024)
    try:
        os.system(command)
        sock.send("yes")
    except:
        sock.send("no")

这是错误:

Error in line: command = sock.recv(1024)
OSError: [WinError 10057] A request to send or receive data was disallowed because the socket is not connected  and (when sending on a datagram socket using a sendto call) no address was supplied

到底发生了什么?

【问题讨论】:

  • 我认为您可能缺少一位听众?绑定后尝试添加 sock.listen(5)。

标签: sockets python-3.x network-programming


【解决方案1】:

您似乎对实际连接到服务器的时间感到困惑,所以请记住,您总是首先绑定到本地端口。因此,这一行:

server_address = ('192.168.1.5', 4242)

实际上应该是:

server_address = ('', 4242)

然后,在无限循环之前,输入以下代码行:

sock.connect(('192.168.1.5', 4242))

你应该很高兴。祝你好运!

编辑:我想我应该更加小心“总是”这个词。在这种情况下,您需要先绑定到本地套接字。

【讨论】:

    【解决方案2】:

    您没有接受任何请求,您只能在接受的套接字上recv 和/或send 以便与客户端通信。

    您的服务器是否只需要连接一个客户端?如果是这样,请尝试以下解决方案:

    尝试在while循环之前添加以下内容

    sock.listen(1)         # 1 Pending connections at most
    client=sock.accept()   # Accept a connection request
    

    在while循环中,需要将所有sock改为client,因为服务器socket不能 可以写也可以读(它所做的只是在192.168.1.5:4242 收听)。

    【讨论】:

      猜你喜欢
      • 2020-04-06
      • 2014-06-29
      • 2021-01-02
      • 2015-05-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多