2016-08-01 30 views
1

更新この問題のようなものは、私が思ったほどインディには関連しておらず、マルチスレッドのトピックもあります。私は100%確信していないので、質問を開いたままにしておきます。Indy TCPクライアントデータが受信されていません

Indy TCPクライアントを使用して通信パートナーとASCII文字列を交換する作業アプリケーションがあります。 通信の流れは次のようになります。

  1. [インディレベル]差出人の文字列
  2. を送信し、[TCPレベル] Wiresharkのは、受信者がTCPを送信し、このパケットは、受信者
  3. [TCPレベル]に配信されたことを伝えますACKは、このパケットを確認し
  4. [インディレベル]は、レシピエントのIOHandler.ReadLn方法は、データを返す
  5. 論理的確認応答が元の送信者に送信され
  6. のwriteln経由[インディレベル()

最近、私は、その通信であっhickupsは、wiresharkのでfiddeling後、私は、次の絵だということに気づい:

  1. [インディレベル] Senderは、文字列
  2. を送信し、[TCPレベル] Wiresharkのは、このパケットを伝えます受信者のIOHandler.ReadLn方法はがどのダを返しません[インディレベル]受信者はこのパケット
  3. を確認するために、TCP ACKを送信し、受信者
  4. [TCPレベル]に配信されましたデータが受信者からの論理的な承認がないため、送信者が再びorginalメッセージを送信するいくつかのタイムアウトの後、受信者

のために利用できないよう行うには、TA

  • 何もありません。

    私の質問は、以下の通りです:wiresharkが基本的なTCPメカニックが自分の仕事をしてくれたとしたら、Indy Clientにはデータがありません。

    よろしく、

    ATTIX
  • +1

    [最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を入力してください。記述したことは、1)あなたの送信者が 'ReadLn()'を満たすために行終了記号を送信していないか、または2)同じIndy IOHandlerから同時に複数のスレッドを読み込んでいる可能性が高い'ReadLn()'が行終端文字を正しく見つけることができないように、IOHandler.InputBufferの内容を破壊しています。同じIOHandlerから同時に複数のスレッドを読み込まないでください。これには内部読み込みを実行する 'Connected'呼び出しが含まれます。 –

    +0

    @RemyLebeauあなたは素晴らしいです! 実際、InputBufferを混乱させた読書スレッドの外でConnectedの呼び出しがありました。 この呼び出しを削除すると、この問題が修正されました。私はもう少しテストを行い、私の投稿を適切に更新してこれを解決したものとしてマークします。 – Attix

    答えて

    0

    【解決しよう】 レミが設けヒントが正しかったです。 私は、入力バッファを台無しにし、出現していないメッセージの症状を引き起こした読み取りスレッド外のTCPクライアントのConnectedを呼び出していました。

    この(不要な)チェックを削除することでこれが解決されました。

    関連する問題