我正在使用 socket 模块在 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() 会立即返回?