Есть ли какие-либо функции сокетов для автоматического подключения клиента к серверу, когда сервер выключается и снова включается? - PullRequest
0 голосов
/ 07 мая 2020

Было бы здорово, если бы я получил представление о моей проблеме. Я использую серверное и клиентское приложение. Я использую сокеты Berkley. Моя проблема теперь в том, что когда мой сервер выключается или отключается от клиента, мой клиент выдает исключение.

"System. Net .Sockets.SocketException (0x80004005): установленное соединение было прервано программным обеспечением на вашем хост-компьютере в System. Net .Sockets.Socket.BeginSend (буфер Byte [], смещение Int32, размер Int32, SocketFlag socketFlags, обратный вызов AsyncCallback, состояние объекта)
в CCLink_Structure.Form1.Send_Message_Timer_Tick ( Отправитель объекта, EventArgs e) в C: \ Users \ yilia \ source \ repos \ CCLink Structure \ CCLink Structure \ Form1.cs: строка 494 в System. Windows .Forms.Timer.OnTick (EventArgs e) в System . Windows .Forms.Timer.TimerNativeWindow.WndPro c (Сообщение & m) в системе. Windows .Forms.NativeWindow.Callback (IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Мой клиент хочет оставаться стабильным, даже когда сервер выключается, и мой клиент должен автоматически подключаться к серверу при его включении.
Я разрабатываю au Ser интерфейс программы в c# windows форме приложения. В своей программе я использую форму. таймер для непрерывной отправки данных на сервер, интервал времени между пакетами данных составляет 50 мс. Моя единственная проблема сейчас заключается в том, что я хочу, чтобы мой клиент остановился без каких-либо исключений и должен повторно подключаться при включении сервера.

    toolStripStatusLabel1.Text = "Connecting...";
    Socket newsock = new Socket(AddressFamily.InterNetwork,
    SocketType.Stream, ProtocolType.Tcp);
    String IP = System.Convert.ToString("192.168.68.110");
    int Port = System.Convert.ToInt32("54601");
    IPEndPoint iep = new IPEndPoint(IPAddress.Parse(IP),
                Port);
    newsock.BeginConnect(iep, new AsyncCallback(Connected), newsock);
}
 catch (Exception ex) { MessageBox.Show(ex.Message); }```

1 Ответ

0 голосов
/ 07 мая 2020

То, о чем вы говорите, - это отказоустойчивость и функциональность повтора. Вам нужно ввести код в свою программу.

Вы можете попробовать использовать библиотеки 3PP, такие как Polly, чтобы помочь вам в этом. https://github.com/App-vNext/Polly

Но я согласен с комментариями, что вам, вероятно, следует посмотреть, почему сервер выходит из строя. Если это плановое обслуживание, то вам следует обратить внимание на решение высокой доступности, в котором ваш сервер развернут по принципу отказоустойчивости 1 + 1 или N + 1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...