networkStream.Read está bloqueando
Eu estou escrevendo um aplicativo simples que irá se conectar com um servidor. No entanto, quero enviar comandos de chat simples (consulteConsole.ReadLine
abaixo). No entanto, este roteiro não vai chegarstring Message = Console.ReadLine();
já que está bloqueadobytesRead = clientStream.Read(message, 0, 4096);
.
Eu quero continuar este script, mas se houver bytes entrando, ele deve processá-los (como está fazendo agora) e se nenhum byte for recebido, ele deve passar pelo script e aguardar a entrada do usuário). Como isso pode ser alcançado?
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();
}