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();
            }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage