2012-07-10 109 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