2017-01-26 8 views
-1

私は、クライアントとサーバーの間に非常に単純なTCP/IP通信プログラムを作成しています。目指すのは、それらの間にある文字列を交換することだけです。クライアントサイドのTCP/IP通信中にループが永久にハングしますか?

クライアントサーバー側は、サーバーに単純な文字列を送受信する必要があります。

問題は、StreamWriterを使用してSeverにデータを送信すると完全に問題が発生することです。しかし、私がStreamReaderを有効にすると、whileループは永遠にぶら下がってしまいます。 "Console.Write(" > ");"行は最初に1回だけ実行されますが、2回目にはもう一度入力する必要はありません。

以下のコードがあります。

メモコードの別の部分にTcpClient _clientとして宣言されたTcpClientの "_client"はすでにソケットに接続されています。

  _sReader = new StreamReader(_client.GetStream(), Encoding.ASCII); 
      _sWriter = new StreamWriter(_client.GetStream(), Encoding.ASCII); 

      _isConnected = true; 
      String sData = null; 

      while (_isConnected) 
      { 
       Console.Write("> "); 
       sData = Console.ReadLine(); 

       _sWriter.WriteLine(sData); 
       _sWriter.Flush(); 


       //If I commnet out these two lines of code below, then there is no problem. Program works fine. 
       String sDataIncomming = _sReader.ReadLine(); 
       Console.WriteLine(sDataIncomming); 

       //While loop just hanging after this line. 
       //It does not even break the while loop. 
       //Either while loop goes back to the top of the line. 
       //Just stuck here. Why ? 

      } 

StreamReaderの2行のコードをコメントアウトすると、プログラムは再び完全に機能します。

この問題を解決するにはどうすればよいですか?あなたの知識を共有することは本当に感謝します。

大切にしてください。

答えて

0

私はこの問題の部分的な答えを見つけたと思います。

ソケットがサーバーから何も受信しなければ、このコード行は永遠に残っているようです。

String sDataIncomming = _sReader.ReadLine(); 

新しい質問は、サーバーからの文字列かどうかを確認する方法です。

サーバから文字列が来ない場合は、ソケットからのリッスンを停止してください。

関連する問題