0

tcpip 経由で医療機器に接続するクライアントを作成する必要があります。このマシンは、内部イベントが発生すると、処理する必要があるデータを含む 1 つまたは複数の XML ファイルを送信してくれます。これらのイベントは予測できないため、データを取得してファイルシステムに保存する非同期接続を考えました。基本的に、そのマシンから送信される XML ごとに、ディスクに保存する必要があります。

私は tcp/ip プログラミングの経験があまりなく、MSDN で非同期クライアントの例 ( Client Example )を見つけたので、少しググってみました。

まず第一に、Console.WriteLine("Response received : {0}", response);決してヒットしないので、プロパティは機能しません。次に、そのマシンがファイルを 1 つだけ送信すると、バッファには同じデータが 2 回あります。また、送信されたxmlファイルの中からEOFを検出する方法を推測しています。

ポーリングも考えましたが、解決策としては正しくないようです。ヒントはありますか?

4

1 に答える 1

1

この場合、ポーリングは役に立たないと確信しています。

最初にいくつかの良い指針を示すことができるいくつかのこと:

1)。ソケットは、決定したサイズの事前定義された提供されたバイト配列で受信データを提供するため、サイズを適切に決定します。例えば:

public const int BufferSize = 256;

MSDN の例では 256 です。データのサイズが 260 バイトの場合、最初に 256 バイトが送信され、次の受信時に残りの 4 バイトが送信されます。これが、受信したすべてのデータを積み上げ、必要なデータを抽出するために開始識別子と終了識別子を毎回確認する方法を見つける必要がある理由の 1 つです。データの平均サイズを考慮して、より大きなバイトバッファーサイズを定義する場合は、別のビューから。ほとんどの場合、メッセージ全体を一度に受け取ることができます。しかし、それでも 100% 達成することはできず、それがソケットの仕組みです。

2)。バッファ バイト配列が適切なタイミングでクリアされていないか、次の使用前にフラッシュされていないため、データを 2 回受信したか、何らかの壊れたデータを受信した可能性があります。

3)。EOF または EOT はさまざまな方法で決定できます。医療機器を制御できる場合は、データを送信する前に最後に識別子を挿入し、同じものを使用して送信されたメッセージを区別できます。送信者をプログラムで制御できず、受信する XML 形式が確実である場合は、受信したデータ内の "<xml>" "</xml>" テキストをいつでも見つけて、それに基づいて区別することができます。

于 2012-11-22T13:20:09.043 に答える