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() がすぐに返される理由はありますか?