我有一個Java套接字服務器,正在等待某個端口的n
字節。我想編寫一個Python客戶端,它只是將某些端口上的字節發送到Java服務器。Python套接字客戶端到Java套接字服務器
由於Python沒有原語,我不確定發送的確實是n
字節。有什麼建議麼?
更多細節:
我有一個Java的DatagramSocket是發生在n
字節:
DatagramPacket dp = new DatagramPacket(new byte[n], n);
我有一個Java套接字服務器,正在等待某個端口的n
字節。我想編寫一個Python客戶端,它只是將某些端口上的字節發送到Java服務器。Python套接字客戶端到Java套接字服務器
由於Python沒有原語,我不確定發送的確實是n
字節。有什麼建議麼?
更多細節:
我有一個Java的DatagramSocket是發生在n
字節:
DatagramPacket dp = new DatagramPacket(new byte[n], n);
如果使用一個數據報插座(例如在UDP協議通過IP),套接字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「原始人」的。這只是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雙打是64位,所以我需要將python 3.4編碼爲8個字節。我將如何做到這一點?我從來沒有真正推動python的周圍,所以這是相當混亂。 – 2009-11-02 06:08:54
@elben,'struct.pack',參見http://docs.python.org/library/struct.html。 – 2009-11-02 16:37:32