networkStream.Read blockiert
Ich schreibe eine einfache Anwendung, die sich mit einem Server verbindet. Ich möchte jedoch auch einfache Chatbefehle senden (sieheConsole.ReadLine
unten). Allerdings wird dieses Skript nicht zu bekommenstring Message = Console.ReadLine();
da es bei gesperrt istbytesRead = clientStream.Read(message, 0, 4096);
.
Ich möchte dieses Skript fortsetzen, aber wenn Bytes eingehen, sollte es sie verarbeiten (wie jetzt) und wenn keine Bytes eingehen, sollte es das Skript durchgehen und auf Benutzereingaben warten. Wie kann das erreicht werden?
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();
}