我有一个java套接字服务器 n 来自某个端口的字节。我想编写一个python客户机,它只在某个端口上向java服务器发送字节。因为python没有原语,所以我不确定是否准确地发送 n 字节。有什么建议吗?更多详细信息:我有一个java datagramsocket n 字节:
n
DatagramPacket dp = new DatagramPacket(new byte[n], n);
6ju8rftf1#
somesocket.send 接受字节字符串参数 s --只要确保 len(s) == n ,你将派精确的 n 字节。“原语”和它有什么关系?!要将任意数据串转换为字节字符串(或返回),请参阅python标准库中的struct模块(对于简单类型(如float)的同构数组的特定但常见的情况,array模块通常更好)。
somesocket.send
s
len(s) == n
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
谢谢!
xvw2m8pv3#
如果您使用的是数据报套接字(例如。g。ip上的udp协议),套接字api保证 n 小于最大有效负载大小,则您的数据将在单个数据包中发送。所以就打电话来 socket.send 就足够了。通过流套接字发送数据的最简单方法是使用 socket.sendall 方法,如 send for streams不能保证所有的数据都已发送(您应该反复调用 send 以便传输所有数据)。举个例子:
socket.send
socket.sendall
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的问题。
3条答案
按热度按时间6ju8rftf1#
somesocket.send
接受字节字符串参数s
--只要确保len(s) == n
,你将派精确的n
字节。“原语”和它有什么关系?!要将任意数据串转换为字节字符串(或返回),请参阅python标准库中的struct模块(对于简单类型(如float)的同构数组的特定但常见的情况,array模块通常更好)。
axkjgtzd2#
多亏了你的回答,我才知道我在找什么。我想要的是struct.unpack和struct.pack,以允许我将python float 1.2345打包为c double的字符串表示形式。
即:
谢谢!
xvw2m8pv3#
如果您使用的是数据报套接字(例如。g。ip上的udp协议),套接字api保证
n
小于最大有效负载大小,则您的数据将在单个数据包中发送。所以就打电话来socket.send
就足够了。通过流套接字发送数据的最简单方法是使用
socket.sendall
方法,如send
for streams不能保证所有的数据都已发送(您应该反复调用send
以便传输所有数据)。举个例子:正如@alex已经提到的,在python中没有与某种“原语”相关的内容。这只是socketapi的问题。