我在TCP / IP套接字上从外部硬件(Zigbee接收器)接收数据流(46字节)到PC。然后通过使用Python编程,iam尝试从TCP / IP套接字中接收数据流中提取消息。
我的python源代码和数据流中提取的数据,在下面的链接
中给出https://docs.google.com/document/pub?id=1pYASqImWm4HkKrDbeeal8fTBsh_GojBQLXixxbMQBlU
我们知道“TCP / IP在数据流上运行,从不在数据包上运行”
如果我在单个流中收到完整的数据包,我就能提取数据。但有时候,单个数据包是在两个数据流(已损坏)中接收的,那个时候我无法从流中提取我的消息。
我对python编程并不比较熟悉,所以任何人都可以帮助我解决这个问题。
我正在寻找任何好的示例(编程)来管理在TCP / IP套接字上破坏数据流,通过将这些流作为完整数据包存储在缓冲区中,然后使用分隔符提取消息。
提前致谢
答案 0 :(得分:1)
这应该有效:
import socket
def connect(addr):
con = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
con.connect(addr)
return con
addr = ('127.0.0.1', 7777)
client_socket = connect(addr)
packet_size = 46
data = ""
while True:
while len(data) < packet_size:
d = client_socket.recv(1024)
if not d:
client_socket.close()
client_socket = connect(addr)
else:
data += d
packet, data = data[:packet_size], data[packet_size:]
lqi = ord(packet[27])
...