Python套接字客户端到Java套接字服务器

时间:2009-11-02 05:42:40

标签: java python sockets client

我有一个Java套接字服务器,它希望从某个端口获得n个字节。我想编写一个Python客户端,它只是将某些端口上的字节发送到Java服务器。

由于Python没有原语,我不确定发送完全n个字节。有什么建议吗?

更多详情:

我有一个Java DatagramSocket,它接收n个字节:

DatagramPacket dp = new DatagramPacket(new byte[n], n);

3 个答案:

答案 0 :(得分:1)

somesocket.send采用字节字符串参数s - 只需确保len(s) == n发送精确的n字节。 “原始人”与它有什么关系?!

要将任意数据束转换为字节字符串(并返回),请参阅Python标准库中的struct模块(针对特殊但常见的简单类型的数组,例如浮点数,{{3模块通常更好。)

答案 1 :(得分: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的问题。

答案 2 :(得分:0)

感谢您的回答,我想出了我在寻找什么。我想要的是struct.unpack和struct.pack,允许我将python float 1.2345打包到C double的字符串表示中。

那是:

>>> struct.pack('d', 1.2345)
'\x8d\x97n\x12\x83\xc0\xf3?'
>>> struct.unpack('d', struct.pack('d', 1.2345))[0]
1.2344999999999999

谢谢!