#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);