[c#]WSACancelBlockingCall


(klemensior15) #1

Próbuję napisać wielowątkowy komunikator. W zamierzeniu serwer ma pośredniczyć w wymianie danych pomiędzy klientami, ale nie o tym.

Słuchanie odbywa się w osobnym wątku, klient łączy się i w osobnym wątku serwer czyta wiadomości.

To jest metoda odpowiedzialna za słuchanie wiadomości od klienta.

private void HandleClientComm(object client)

        {

 string messageReceived = null;

            byte[] bytesFrom = new byte[4096];

            int bytesRead;

            NetworkStream clientStream = null;


            using (TcpClient tcpClient = (TcpClient)client)

            {

                clientStream = tcpClient.GetStream();


                while (true)

                {

                    bytesRead = 0;


                    try

                    {

                        //blocks until a client sends a message

                        bytesRead = clientStream.Read(bytesFrom, 0, 4095);




                    }

                    catch (Exception ex)

                    {

                        //a socket error has occured

                        System.Windows.MessageBox.Show("Blad z odbierania wiad " + ex.Message);


                        break;

                    }


                    if (bytesRead == 0)

                    {

                        //the client has disconnected from the server

                        break;

                    }


                    //message has successfully been received


                    messageReceived = ASCIIEncoding.ASCII.GetString(bytesFrom);

                    if (messageReceived.StartsWith("\\name"))

                    {

                        string pseudo = messageReceived.Substring(6);

                        activeUsers.Add(new User(pseudo, tcpClient));

                    }

                    else if (messageReceived.StartsWith("\\connect"))

                    {

                        //tutaj bedzie komunikacja z inna wiaruchna

                    }

                    else

                    {

                        string podlacz = string.Join(" ", new string[] { "Połączyłem sobie ", "testowego" });

                        messageReceived += "\n";

                        Log += podlacz;

                        Log += messageReceived;



                    }

                }

            }

                    //tcpClient.Close();

        }

Jednak dostaję wyjątek w messagebox'ie

Jak mogę to naprawić?

Będę wdzięczny za wszelkie informacje.

Dziękuję i pozdrawiam.