我有一个简单的python tcp服务器(我正在使用 SocketServer 类)的问题,必须从Java客户端接收数据 .
这里是服务器端代码:
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服务器然后尝试执行必须向服务器发送整数的客户端 .
在服务器端,Python引发异常,因为 recv(4) 函数不读取4个字节,它只返回一个字节 .
我的java客户端实际上正确地发送了4个字节,如果我尝试调用 recv(1) 4次,它正确读取4个字节 .
我试着编写一个Python客户端来执行我的java客户端的相同操作,在这种情况下服务器的 recv(4) 运行良好 .
如何解决这个问题呢?我想实现一个简单的python buffered reader function ,它逐字节地读取套接字,但我确信存在更智能的解决方案 .