Я пишу приложение многопоточного сокета на Python, используя модуль сокета. сервер прослушивает соединения и, когда он их получает, порождает поток для этого сокета.
серверный поток отправляет некоторые данные клиенту. но клиент еще не готов его получить. Я думал, что это заставило бы сервер ждать, пока клиент не запустит recv, но вместо этого немедленно вернется
затем клиент вызывает recv, который блокирует, и никакие данные не принимаются.
конструктор клиентского сокета
self.__clientSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__clientSocket.connect((server, port))
конструктор серверного сокета
self.servSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.servSock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
#self.servSock.settimeout(None)
self.servSock.setblocking(1)
self.servSock.bind((self.addr,self.port))
self.servSock.listen(5)
прослушивание принятия потока
try:
(cs, address) = self.servSock.accept()
except socket.timeout:
return
threadName = '\r\nClient %s:%s\r\n' % (cs, address)
print threadName
clientSocketHandler = ClientSocket()
clientSocketHandler.setClientSocket(cs)
self.clients.newThread(self.clientFunc, {clientSocketHandler : "1"}, threadName).start()
сервер и клиенты отправляют / записывают методы из ClientSocket
receivedData = self.__clientSocket.recv(1024*1024)
self.__clientSocket.send(s)
есть идеи, почему send () сразу возвращается?