Python套接字客户端到Java套接字服务器
问题描述:
我有一个Java套接字服务器,正在等待某个端口的n
字节。我想编写一个Python客户端,它只是将某些端口上的字节发送到Java服务器。Python套接字客户端到Java套接字服务器
由于Python没有原语,我不确定发送的确实是n
字节。有什么建议么?
更多细节:
我有一个Java的DatagramSocket是发生在n
字节:
DatagramPacket dp = new DatagramPacket(new byte[n], n);
答
如果使用一个数据报插座(例如在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
谢谢!
所以说我想发送双3.4。 Java双打是64位,所以我需要将python 3.4编码为8个字节。我将如何做到这一点?我从来没有真正推动python的周围,所以这是相当混乱。 – 2009-11-02 06:08:54
@elben,'struct.pack',参见http://docs.python.org/library/struct.html。 – 2009-11-02 16:37:32