2012-07-10 108 views
0

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

我的Python源代码,并从数据流中提取数据,在波纹管连接给出

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

正如我们所知道的“TCP/IP上的数据流进行操作,不会被包”

如果我在单个流中收到完整的数据包,我可以提取数据。但是有时候,单个数据包会在两个数据流中被接收(中断),那时我无法从流中提取我的消息。

我不是更加熟悉python编程,所以任何人都可以帮我解决这个问题。

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

在此先感谢

回答

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]) 
    ... 
+1

+1,我唯一关心的是,你应该检查一下'recv'不返回一个空字符串,表示关闭的连接。 – tomasz 2012-07-10 22:49:53

+0

谢谢。我已更新代码以在连接关闭时重新连接。 – suzanshakya 2012-07-11 05:28:51

+0

首先感谢您的代码, – user1514242 2012-07-12 07:50:20