我正在使用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
到底是怎么回事?
答案 0 :(得分:0)
看起来您对实际连接到服务器的时间感到困惑,所以请记住,您始终首先绑定到本地端口。因此,这一行:
server_address = ('192.168.1.5', 4242)
实际应该是:
server_address = ('', 4242)
然后,在无限循环之前,输入以下代码行:
sock.connect(('192.168.1.5', 4242))
你应该好好去。祝你好运!
编辑:我想我应该对“永远”这个词更加小心。在这种情况下,您希望首先绑定到本地套接字。答案 1 :(得分:0)
您不接受任何请求,并且只能在接受的套接字上recv
和/或send
才能与客户端通信。
您的服务器是否只需要连接一个客户端?如果是这样,请尝试以下解决方案:
尝试在while循环之前添加以下内容
sock.listen(1) # 1 Pending connections at most
client=sock.accept() # Accept a connection request
在while循环中,由于服务器套接字无法将所有sock
更改为client
被写入或读取(它所做的只是在192.168.1.5:4242
上监听)。