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

Python套接字客户端到Java套接字服务器,java,python,sockets,client,Java,Python,Sockets,Client,我有一个Java套接字服务器,它希望从某个端口获得n字节。我想编写一个Python客户端,它只在某个端口向Java服务器发送字节 因为Python没有原语,所以我不确定是否发送准确的n字节。有什么建议吗 更多详情: 我有一个Java DatagramSocket,它接受n字节: DatagramPacket dp = new DatagramPacket(new byte[n], n); somesocket.send接受一个字节字符串参数s——只要确保len=n,您将准确地发送n字节。“原语

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

因为Python没有原语,所以我不确定是否发送准确的
n
字节。有什么建议吗

更多详情:

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

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

somesocket.send
接受一个字节字符串参数
s
——只要确保
len=n
,您将准确地发送
n
字节。“原语”和它有什么关系


要将任意数据串转换为字节字符串(或返回),请参阅Python标准库中的模块(对于类似于浮点等简单类型的同质数组的特定但常见的情况,该模块通常更好)。

如果您使用的是数据报套接字(例如IP上的UDP协议),Socket API保证,如果
n
小于最大有效负载大小,则数据将在单个数据包中发送。所以只要调用socket.send就足够了

通过套接字发送数据的最简单方法是使用
套接字。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 Double是64位的,所以我需要将python 3.4编码为8个字节。我该怎么做?我从来没有在python中真正推敲过位,所以这相当令人困惑。