0

TCP/IP ソケットで外部ハードウェア (Zigbee レシーバー) から PC へのデータ ストリーム (46 バイト) を受信して​​います。次に、Python プログラミングを使用して、TCP/IP ソケットから受信したデータ ストリームからメッセージを抽出しようとしています。

以下のリンクにある私のpythonソースコードとデータストリームから抽出されたデータ

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

私たちが知っているように、「TCP / IPはデータのストリームで動作し、パケットではありません」

単一のストリームで完全なパケットを受信した場合、データを抽出できます。しかし、1 つのパケットが 2 つのデータ ストリームで受信される (壊れている) 場合があり、そのときはストリームからメッセージを抽出できませんでした。

私はPythonプログラミングに慣れていないので、この問題を解決するのを手伝ってくれる人はいますか?

TCP/IP ソケットでの受信データ ストリームの中断を管理するための良い例 (プログラミング) を探しています。それらのストリームを完全なパケットとしてバッファに格納し、区切り記号を使用してメッセージを抽出します。

前もって感謝します

4

1 に答える 1

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])
    ...
于 2012-07-10T11:19:04.237 に答える