1
나는 아주 간단한 파이썬 소켓 서버에서 일하고있다. 비 블로킹 소켓을 사용합니다. 서버 및 클라이언트는 Windows 7 x64 (Python 2.7.3)에서 실행됩니다. 여기에 내가 클라이언트에서 데이터를 수신하는 코드입니다 :파이썬 socket.recv 예외
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)
내가 메시지 "테스트"수신 서버를 참조하십시오 이상 그리고 다시. 그러나 그것이받은 것을 출력하기 전에 다음과 같은 오류 메시지가 나타납니다.
socket.error - A non-blocking socket operation could not be completed immediately.
분명히 예외는 part = s.recv(4096)
에 던져 지지만 그 이유는 무엇입니까?
이 링크에도 오류 코드가 있습니다. 10035는 심각한 오류가 아니며 수신 할 데이터가 없을 때 throw됩니다. http://msdn.microsoft.com/en-ca/library/windows/desktop/ms740668(v=vs.85).aspx –