networkStream.Read está bloqueando
Estoy escribiendo una aplicación simple que se conectará con un servidor. Sin embargo, también quiero enviar comandos de chat simples (verConsole.ReadLine
abajo). Sin embargo, este script no llegará astring Message = Console.ReadLine();
ya que está bloqueado enbytesRead = clientStream.Read(message, 0, 4096);
.
Quiero continuar con este script, pero si hay bytes entrantes, debería procesarlos (como lo está haciendo ahora) y si no hay bytes entrantes, debería pasar por el script y esperar la entrada del usuario). ¿Cómo se puede lograr esto?
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();
}