networkStream.Read正在阻塞

时间:2012-05-23 11:46:20

标签: c#

我正在编写一个与服务器连接的简单应用程序。但是我想发送简单的聊天命令(参见下面的Console.ReadLine)。但是,此脚本无法访问string Message = Console.ReadLine();,因为它已在bytesRead = clientStream.Read(message, 0, 4096);被阻止。

我想继续这个脚本,但如果有字节传入,它应该处理它们(就像它现在正在做的那样),如果没有字节传入,它应该通过脚本并等待用户输入)。如何实现这一目标?

        TcpClient tcpClient = (TcpClient)client;
        NetworkStream clientStream = tcpClient.GetStream();

        byte[] message = new byte[4096];
        int bytesRead;

        while (true)
        {
            bytesRead = 0;

            try
            {
                // Blocks until a client sends a message                    
                bytesRead = clientStream.Read(message, 0, 4096);
            }
            catch (Exception)
            {
                // A socket error has occured
                break;
            }

            if (bytesRead == 0)
            {
                // The client has disconnected from the server
                break;
            }

            // Message has successfully been received
            ASCIIEncoding encoder = new ASCIIEncoding();

            // Output message
            Console.WriteLine("To: " + tcpClient.Client.LocalEndPoint);
            Console.WriteLine("From: " + tcpClient.Client.RemoteEndPoint);
            Console.WriteLine(encoder.GetString(message, 0, bytesRead));

            // Return message
            string Message = Console.ReadLine();
            if (Message != null)
            {
                byte[] buffer = encoder.GetBytes(Message);
                clientStream.Write(buffer, 0, buffer.Length);
                clientStream.Flush();
            }

1 个答案:

答案 0 :(得分:6)

您可以尝试使用DataAvailable属性。它会告诉你套接字是否有任何等待。如果错误,请不要进行Read调用。