我在一个简单的pythontcp服务器上遇到了一个问题(我使用的是SocketServer
类),它必须从java客户机接收数据。在
这里是服务器端代码:
class ServerRequestHandler(SocketServer.BaseRequestHandler):
[...]
def handle(self):
requestCode = struct.unpack('>i', self.request.recv(4))[0]
[...]
[...]
这里是客户:
^{pr2}$我启动Python服务器,然后尝试执行必须向服务器发送整数的客户机。在
在服务器端,Python引发了一个异常,因为recv(4)
函数不读取4个字节,它只返回一个字节。在
实际上,如果我尝试调用recv(1)
4次,它会正确地读取4个字节,那么我的java客户机会正确地发送4个字节。在
我试图编写一个Python客户机来执行java客户机的相同操作,在本例中,服务器的recv(4)
工作良好。在
如何解决这个问题?我想实现一个简单的python buffered reader function
,它逐字节从套接字读取数据,但我确信存在一个更聪明的解决方案。在
recv(4)将读取4个字节的最大。请参阅文档:http://docs.python.org/library/socket.html。我认为制作一个简单的缓冲读卡器函数是一个完全可以接受的解决方案。在
也许你可以使用io模块中的东西?^例如{a2}。在
recv不需要读取4个字节,它只需要获取最多4个字节的任何内容。因为,正如你所说,你可以打4次recv(1)。你能做到的
这将重复调用
sock
上的recv
,直到接收到size
字节。如果part == ''
套接字是关闭的,那么它将返回关闭之前的任何内容所以改变
^{pr2}$到
^{3}$我建议您将
recvall
作为类的一个方法,以使事情更干净。在这是对此处定义的安全套接字类方法的修改:http://docs.python.org/howto/sockets.html
相关问题 更多 >
编程相关推荐