[英]Python socket client to a Java socket server
我有一個Java套接字服務器,期望從某個端口恰好n
個字節。 我想編寫一個Python客戶端,該客戶端僅在某個端口上將字節發送到Java服務器。
由於Python沒有原語,我不知道送准確n
個字節。 有什么建議么?
更多細節:
我有一個Java DatagramSocket,它需要n
個字節:
DatagramPacket dp = new DatagramPacket(new byte[n], n);
如果您使用的是數據報套接字(例如,基於IP的UDP協議),則Socket 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中沒有與某種“基元”相關的內容。 這是套接字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
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.