C # Установленное соединение было прервано программным обеспечением на вашем хост-компьютере

Эти ошибки становятся все более частыми на моем игровом сервере. Они вызывают закрытие и перезапуск сервера …

  System.Net.Sockets.SocketException (0x80004005): установленное соединение было прервано программным обеспечением на вашем хост-компьютере  в System.Net.Sockets.Socket.BeginSend (буфер Byte [], смещение Int32, размер Int32, SocketFlags socketFlags, обратный вызов AsyncCallback, состояние объекта) в iRP.Game.Sessions.Session.SendData (Byte [] Data)  

Это код, из которого генерируются эти ошибки:

  public void SendData (byte [] Data) {try {if (mSocket  == null) {//Output.WriteLine("[SND] Socket имеет нулевое исключение, что означает, что теперь он недействителен. Удалите этот сокет! ", OutputLevel.CriticalError);  } else {mSocket.BeginSend (Данные, 0, Data.Length, SocketFlags.None, sendCallback, mSocket);  }} catch (Exception e) {string WhatToWrite = "Ошибка обработана (СЕССИЯ):" + e.ToString () + " n  n" + e.Message + " n  nStack:" + e.StackTrace + Environment  .NewLine + " n  n";  File.AppendAllText (Environment.CurrentDirectory + "\ data \ fatal.txt", WhatToWrite);  Program.Stop ();  }}  

Размеры буфера установлены правильно, мы используем KeepAlive на сокете и использовали таймауты отправки и получения.

Люди предложили отключить брандмауэр может помочь, но всякий раз, когда я это делаю, наш игровой сервер (выделенный сервер) перезагружается, как если бы он был атакован, поэтому брандмауэр должен оставаться включенным.

У кого-нибудь еще есть другие решения для этого?

PS: Мы стоим за службами защиты от DDoS-атак, которые могут ограничивать количество подключений …


Установленное соединение был прерван программным обеспечением на вашем хост-компьютере

Это стандартное сообщение об ошибке, оно исходит из Windows. Базовый код ошибки — WSAECONNABORTED. Что на самом деле не означает больше, чем «соединение было прервано». Вы должны быть немного осторожны с частью фразы «ваша хост-машина». В подавляющем большинстве прикладных программ Windows именно хост, к которому подключено настольное приложение, прервал соединение. Обычно это сервер где-то еще.

Однако, когда вы реализуете свой собственный сервер, роли меняются местами. Теперь вам нужно прочитать сообщение об ошибке как «прервано приложением на другом конце провода». Что, конечно, не редкость, когда вы реализуете сервер, клиентские программы, которые используют ваш сервер, не могут прервать соединение по какой-либо причине. Это может означать, что брандмауэр или прокси прервали соединение, но это маловероятно, поскольку они обычно не позволяют установить соединение.

Вы действительно не знаете, почему соединение было прервано, если не понимаете, что происходит на другом конце провода. Это, конечно, трудно найти. Если ваш сервер доступен через Интернет, не сбрасывайте со счетов возможность того, что вас зондирует сканер портов. Или ваши клиенты, ищущие чит игры.


Эта проблема возникает, если два программного обеспечения используют один и тот же порт для подключения к серверу
попробуйте закрыть порт с помощью cmd в соответствии с вашей операционной системой
, затем перезагрузите студию Android, Eclipse или программное обеспечение.


Эта проблема возникает, если два программного обеспечения используют один и тот же порт для подключения к серверу
пытаются закрыть порт с помощью cmd в соответствии с вашей операционной системой
, затем перезагрузить студию Android или ваш Eclipse или ваше программное обеспечение.

Оцените статью
techsly.ru
Добавить комментарий