2012-04-11 47 views
1

有發送UPD流的服務器 - 每秒的Python讀UDP C#流

我使用雙絞線來讀取它60級的數據包:

from twisted.internet.protocol import DatagramProtocol 
from twisted.internet import reactor 
class Echo(DatagramProtocol): 
    def datagramReceived(self, data, (host, port)): 
     print ('1',data) 
class Echo(DatagramProtocol): 
reactor.listenUDP(port, Echo()) 
reactor.run() 

在控制檯I有像:

('1', '\xea\xb6|C\x00\x00\x00\x00gK\xa0E\x00O\x05\xbd\x97\xb7\x04B\xf6\[email protected]\xb9\xa8\x0cD\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x004\x8e8\xbfKkv\xb3\xa6i1\xbf\xa6i1\xbf\x00\x00\x00\x004\x8e8?\xc0\x98\xed\xc1\xbd\x98\xed\xc1=\x1a\x9a\xc1\x96\x19\x9a\xc1\x9d\x88)\xba\x9fB,\xbaA\xb2\xa9;\xc5]\xd86\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x06\x00\x00\x80\xcd\xcc\xcc=\x00\x00\x80?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xd4Q\[email protected]') 
('1', '\x7f\xd5\x82D\x00\x00\x00\x00+8\x89Ed\xf0/\xbe\xbdy\x06D\x8b\[email protected]\xa9-ZD\x9f\x03EB\x89\xeb4\xc2Z+\x87\xbes\xf7\x9bAw\xc7\xca\xbeMv\x83\xbc\xc4\x07k\xbf\xd6\x06k\xbf\x93);\xbc\xd6\xe0\xca>m\xc4\xb5A\x7f\xdc\xd6A\xf7\x8arA!\xbdcAe\r\xb3B\xc4\xf7\xd3B*\\\xdeBWF\xe5B\xa5\xffBB\xddaCB\x8c EBL8EB\x00\x00\x807\x00\x00$\xbc\x00\x00\x807\x00\x00\x00\x00\x00\x00\[email protected]\xc6\xb1=(O\x12\xbf\x00\x00\x00\x00\x885\xa4D') 

分析流量的人說:「數據包通過這個包含字段(38個不同的字段),所有字段都是float數據類型(在C#中)」

我明白來了38個數字?我可以使用Python來閱讀它們嗎?

+0

你就不能問那個人他或她的意思是? – 2012-04-11 12:58:45

+1

以二進制形式發送浮點值是一個糟糕的主意。最好的方法是將其轉換爲固定長度的字符串,併發送該字符串。 – 2012-04-11 13:00:07

回答

3

您可以使用struct模塊爲:

floats = struct.unpack('<38f', data) 

(您可能需要根據您的數據的存儲方式改變><