python套接字客户端到java套接字服务器

yqlxgs2m  于 2021-07-05  发布在  Java
关注(0)|答案(3)|浏览(331)

我有一个java套接字服务器 n 来自某个端口的字节。我想编写一个python客户机,它只在某个端口上向java服务器发送字节。
因为python没有原语,所以我不确定是否准确地发送 n 字节。有什么建议吗?
更多详细信息:
我有一个java datagramsocket n 字节:

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

6ju8rftf1#

somesocket.send 接受字节字符串参数 s --只要确保 len(s) == n ,你将派精确的 n 字节。“原语”和它有什么关系?!
要将任意数据串转换为字节字符串(或返回),请参阅python标准库中的struct模块(对于简单类型(如float)的同构数组的特定但常见的情况,array模块通常更好)。

axkjgtzd

axkjgtzd2#

多亏了你的回答,我才知道我在找什么。我想要的是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

谢谢!

xvw2m8pv

xvw2m8pv3#

如果您使用的是数据报套接字(例如。g。ip上的udp协议),套接字api保证 n 小于最大有效负载大小,则您的数据将在单个数据包中发送。所以就打电话来 socket.send 就足够了。
通过流套接字发送数据的最简单方法是使用 socket.sendall 方法,如 send for streams不能保证所有的数据都已发送(您应该反复调用 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中没有与某种“原语”相关的内容。这只是socketapi的问题。

相关问题