我有一个简单的 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)
运行良好。
如何解决这个问题呢?我想实现一个简单的 pythonbuffered reader function
来逐字节读取套接字,但我确信存在更智能的解决方案。