Javaクライアントからデータを受信する必要がある単純なpythontcpサーバー(SocketServer
クラスを使用しています)に問題があります。
ここにサーバー側のコードがあります:
class ServerRequestHandler(SocketServer.BaseRequestHandler):
[...]
def handle(self):
requestCode = struct.unpack('>i', self.request.recv(4))[0]
[...]
[...]
ここにクライアントがあります:
addr = InetAddress.getByName(hostname);
SocketAddress sockaddr = new InetSocketAddress(addr, port);
clientSocket = new Socket();
clientSocket.connect(sockaddr, timeoutMs);
clientSocketDataOutputStream = new DataOutputStream(clientSocket.getOutputStream());
int requestCode = 1;
clientSocketDataOutputStream.writeInt(requestCode);
clientSocketDataOutputStream.flush();
Pythonサーバーを起動してから、サーバーに整数を送信する必要のあるクライアントを実行しようとします。
recv(4)
サーバー側では、関数が4バイトを読み取らないため、Pythonは例外を発生させ、1バイトのみを返します。
私のJavaクライアントは実際には4バイトを正しく送信しますが、recv(1)
4回呼び出そうとすると、4バイトを正しく読み取ります。
Javaクライアントと同じ操作を実行するPythonクライアントを作成しようとしましたが、この場合、サーバーは正常にrecv(4)
機能します。
この問題を解決する方法は?buffered reader function
ソケットからバイトごとに読み取る単純なPythonを実装しようと思いましたが、よりスマートなソリューションが存在すると確信しています。