簡體   English   中英

Python套接字客戶端到Java套接字服務器

[英]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);

somesocket.send接受一個字節字符串參數s僅確保len(s) == n ,您發送准確的n個字節。 “原始”與它有什么關系?

要將任意一束數據轉換為字節字符串(或返回字節字符串),請參見Python標准庫中的struct模塊(對於簡單類型的均質數組(例如浮點數)的特定但常見的情況, 數組模塊通常甚至更好)。

如果您使用的是數據報套接字(例如,基於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM