networkStream.Read正在阻塞

我正在编写一个与服务器连接的简单应用程序。 但是我想发送简单的聊天命令(参见下面的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(); } 

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