Я пытаюсь закрыть udp-соединение

#c#

#c#

Вопрос:

У меня проблема в Visual Studio 2019, при программировании подключения к серверу-клиенту. Когда я вызываю свое закрывающее соединение, программа выдает исключение break null. Я пробовал разные способы выхода из UDP-соединения, но ни один из них не работает.

Вот мой код, который выдает ошибку клиенту:

 this.clientSocket.SendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer);
 

Когда программа завершает работу после этого, мой сервер выдает исключение сокета при повторном подключении.

КЛИЕНТ недействителен

     public void Client_Closing()
    {
        Console.WriteLine("CLOSING SOCKET");

        try
        {
            Console.WriteLine("CLOSING SOCKET");
             
            // Initialise a packet object to store the data to be sent
            Packet sendData = new Packet();
            sendData.ChatDataIdentifier = DataIdentifier.LogOut;
            sendData.ChatName = this.name;
            sendData.ChatMessage = null;
                
            // Get packet as byte array
            byte[] byteData = sendData.GetDataStream();
               
            // Send packet to the server
            this.clientSocket.SendTo(byteData, 0, byteData.Length, SocketFlags.None, epServer);   
              
            // Close the socket
            this.clientSocket.Close();
        }
        catch (Exception ex)
        {
            // MessageBox.Show("Closing Error: "   ex.Message, "UDP Client", MessageBoxButtons.OK, MessageBoxIcon.Error);
            Console.WriteLine("Closing Error: "   ex.Message);
        }
    }
 

Комментарии:

1. проверьте, имеет ли epServer значение?

Ответ №1:

Я понял это, спасибо за помощь coder_b

Я вызывал свою закрывающую пустоту из обработчика событий, который запускается, если клиент закрывается. и я установил его в другом экземпляре класса.

Я создал экземпляр обработчика событий для того же объекта класса, в котором находится сокет, и он сработал, вот исправленный код;

                 AsynchronousClient AsynchronousClient = new AsynchronousClient();
            AsynchronousClient.StartClient();



            // Some boilerplate to react to close window event, CTRL-C, kill, etc
            //AsynchronousClient h = new AsynchronousClient(); //REMOVED THIS
            _handler  = new EventHandler(AsynchronousClient.Handler); //FIXED HERE
            SetConsoleCtrlHandler(_handler, true);