Python套接字客户端连接Java套接字服务器
我有一个Java的socket服务器,它需要从某个端口接收正好 n
个字节的数据。我想写一个Python客户端,向这个Java服务器发送字节数据。
因为Python没有像Java那样的基本数据类型,我不太确定怎么才能发送正好 n
个字节。有没有什么建议呢?
更多细节:
我有一个Java的DatagramSocket,它需要接收 n
个字节:
DatagramPacket dp = new DatagramPacket(new byte[n], n);
3 个回答
0
感谢大家的回答,我终于找到了我想要的东西。我想要的是使用struct.unpack和struct.pack这两个功能,来把Python中的浮点数1.2345转换成C语言中的双精度浮点数的字符串表示。
也就是说:
>>> struct.pack('d', 1.2345)
'\x8d\x97n\x12\x83\xc0\xf3?'
>>> struct.unpack('d', struct.pack('d', 1.2345))[0]
1.2344999999999999
谢谢!
1
如果你在使用数据报套接字(比如通过IP的UDP协议),那么Socket API保证只要你的数据大小n
小于最大负载大小,你的数据就会在一个数据包中发送出去。所以只需要调用socket.send
就可以了。
而对于流套接字,发送数据最简单的方法是使用socket.sendall
这个方法,因为对于流套接字,send
并不能保证所有数据都会被发送出去(你可能需要多次调用send
才能把所有数据都发出去)。下面是一个例子:
>>> s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
>>> s.connect(('localhost', 12345))
>>> data = 'your data of length n'
>>> s.sendall(data)
正如@Alex提到的,Python中并没有什么“原始数据类型”的概念。这只是Socket API的问题。