Python套接字缓冲:消息框架

时间:2012-07-10 10:05:52

标签: python sockets tcp-ip

我在TCP / IP套接字上从外部硬件(Zigbee接收器)接收数据流(46字节)到PC。然后通过使用Python编程,iam尝试从TCP / IP套接字中接收数据流中提取消息。

我的python源代码和数据流中提取的数据,在下面的链接

中给出

https://docs.google.com/document/pub?id=1pYASqImWm4HkKrDbeeal8fTBsh_GojBQLXixxbMQBlU

我们知道“TCP / IP在数据流上运行,从不在数据包上运行”

如果我在单个流中收到完整的数据包,我就能提取数据。但有时候,单个数据包是在两个数据流(已损坏)中接收的,那个时候我无法从流中提取我的消息。

我对python编程并不比较熟悉,所以任何人都可以帮助我解决这个问题。

我正在寻找任何好的示例(编程)来管理在TCP / IP套接字上破坏数据流,通过将这些流作为完整数据包存储在缓冲区中,然后使用分隔符提取消息。

提前致谢

1 个答案:

答案 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])
    ...