gpt4 book ai didi

Python socket.recv 异常

转载 作者:行者123 更新时间:2023-11-28 20:25:16 31 4
gpt4 key购买 nike

我正在开发一个非常简单的 python 套接字服务器。我使用非阻塞套接字。服务器和客户端在 windows 7 x64 和 python 2.7.3 上运行。这是我从客户端接收数据的代码:

def listenToSockets(self):

while True:

changed_sockets = self.currentSockets

ready_to_read, ready_to_write, in_error = select.select(changed_sockets,[],[])

for s in ready_to_read:
# if its the server master socket someone is connecting
if s == self.socket:
(client_socket, address) = s.accept()
print "putting " + address[0] + " onto connections\n";
client_socket.setblocking(0)

self.currentSockets.append(client_socket)
print "current client count : " + str(len(self.currentSockets) - 1)

else:

data = ''
try:

while True:
part = s.recv(4096)
if part != '':
data = data + part
elif part == '':
break


except socket.error, (value,message):
print 'socket.error - ' + message


if data != '':
print "server received "+data
else:
print "Disconnected "+str(s.getsockname())

self.currentSockets.remove(s)
s.close()

这是客户端一遍又一遍地发送一些数据:

#client example
import socket
import time

client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('192.168.0.41', 9999))


while 1:
client_socket.send("test")
time.sleep(2)

我看到服务器一遍又一遍地收到消息“test”。但在打印出收到的内容之前,我收到以下错误消息。

socket.error - A non-blocking socket operation could not be completed immediately.

显然在 part = s.recv(4096) 处抛出了异常,但为什么呢?

最佳答案

这正是非阻塞套接字应该做的。

  • 阅读可用数据,如果有的话
  • 如果没有可用的,引发错误而不是阻止

所以每次您尝试接收时都会遇到异常,并且没有可用数据。

关于Python socket.recv 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15509245/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com