while循环在客户端的TCP / IP通信期间永久挂起?

时间:2017-01-26 00:52:28

标签: c# .net server client tcp-ip

我在Client和Server之间创建了非常简单的TCP / IP通信程序。目的只是在它们之间交换一些字符串。

Client Server端需要向Server发送和接收一些简单的字符串。

问题是,当我使用StreamWriter将数据发送到Sever时,它可以正常工作。但是,当我启用StreamReader时,while循环只是永远挂起。 “Console.Write(”>“);” line仅在开头执行一次,但在第二次从未再次提示。

以下是代码。

注意“_client”已经连接了TcpClient的套接字,在另一部分代码中声明为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的两行代码,程序将再次完美。

如何解决此问题?分享您的知识将非常感激。

亲切的问候。

1 个答案:

答案 0 :(得分:0)

我想我已经找到了解决这个问题的部分答案。

我认为如果套接字没有收到任何来自服务器的东西,似乎这个代码行永远停滞不前。

String sDataIncomming = _sReader.ReadLine();

所以新问题是如何检查某些字符串是否来自服务器?

如果没有来自服务器的字符串,则只需停止从套接字监听。