1
更新この問題のようなものは、私が思ったほどインディには関連しておらず、マルチスレッドのトピックもあります。私は100%確信していないので、質問を開いたままにしておきます。Indy TCPクライアントデータが受信されていません
Indy TCPクライアントを使用して通信パートナーとASCII文字列を交換する作業アプリケーションがあります。 通信の流れは次のようになります。
- [インディレベル]差出人の文字列
- を送信し、[TCPレベル] Wiresharkのは、受信者がTCPを送信し、このパケットは、受信者
- [TCPレベル]に配信されたことを伝えますACKは、このパケットを確認し
- [インディレベル]は、レシピエントのIOHandler.ReadLn方法は、データを返す 論理的確認応答が元の送信者に送信され
- のwriteln経由[インディレベル()
最近、私は、その通信であっhickupsは、wiresharkのでfiddeling後、私は、次の絵だということに気づい:
- [インディレベル] Senderは、文字列
- を送信し、[TCPレベル] Wiresharkのは、このパケットを伝えます受信者のIOHandler.ReadLn方法はがどのダを返しません[インディレベル]受信者はこのパケット
- を確認するために、TCP ACKを送信し、受信者
- [TCPレベル]に配信されましたデータが受信者からの論理的な承認がないため、送信者が再びorginalメッセージを送信するいくつかのタイムアウトの後、受信者
のために利用できないよう行うには、TA
私の質問は、以下の通りです:wiresharkが基本的なTCPメカニックが自分の仕事をしてくれたとしたら、Indy Clientにはデータがありません。
よろしく、
ATTIX
[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を入力してください。記述したことは、1)あなたの送信者が 'ReadLn()'を満たすために行終了記号を送信していないか、または2)同じIndy IOHandlerから同時に複数のスレッドを読み込んでいる可能性が高い'ReadLn()'が行終端文字を正しく見つけることができないように、IOHandler.InputBufferの内容を破壊しています。同じIOHandlerから同時に複数のスレッドを読み込まないでください。これには内部読み込みを実行する 'Connected'呼び出しが含まれます。 –
@RemyLebeauあなたは素晴らしいです! 実際、InputBufferを混乱させた読書スレッドの外でConnectedの呼び出しがありました。 この呼び出しを削除すると、この問題が修正されました。私はもう少しテストを行い、私の投稿を適切に更新してこれを解決したものとしてマークします。 – Attix