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

问题描述:

我有一个Java套接字服务器,正在等待某个端口的n字节。我想编写一个Python客户端,它只是将某些端口上的字节发送到Java服务器。Python套接字客户端到Java套接字服务器

由于Python没有原语,我不确定发送的确实是n字节。有什么建议么?

更多细节:

我有一个Java的DatagramSocket是发生在n字节:

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

somesocket.send需要一个字节的字符串参数s - 只是确保len(s) == n,你是发送精确的n字节。 “原始”与它有什么关系?

将数据转化为字节串(反面)的任意束,看到在Python的标准库中的struct模块(用于简单的类型,如漂浮的均匀阵列的具体,但频繁的情况下,array模块往往是更好)。

+0

所以说我想发送双3.4。 Java双打是64位,所以我需要将python 3.4编码为8个字节。我将如何做到这一点?我从来没有真正推动python的周围,所以这是相当混乱。 – 2009-11-02 06:08:54

+0

@elben,'struct.pack',参见http://docs.python.org/library/struct.html。 – 2009-11-02 16:37:32

如果使用一个数据报插座(例如在UDP协议通过IP),套接字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的问题。

感谢您的回答,我想出了我在找什么。我想要的是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 

谢谢!