У меня есть приложение, которое использует TCPClient для подключения к TCPServer и обмена данными каждые 300 мс. Приложение и соединения работают как положено. Я проверил соединение в течение 2 дней и все время работает без ошибок. Сегодня я получил ошибку, которую я не могу решить и которую я не понимаю. Компьютер (TCPClient) и TCPServer находятся в одной сети, и оба получают свои IP-адреса через DHCP. Приложение начинается с чтения информации о сетевом адаптере и считывает IP-адрес сетевых адаптеров и другую информацию:
NetworkInterface[] adapter = NetworkInterface.GetAllNetworkInterfaces();
На компьютере обнаружено два адаптера, следующий код доставляет IP-адреса:
foreach (UnicastIPAddressInformation ip in adapter.GetIPProperties().UnicastAddresses)
{
if (ip.Address.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
{
this.ip = ip.Address.ToString();
this.mask = ip.IPv4Mask.ToString();
}
}
Адаптер один: IP: 192.168.0.153, Маска: 255.255.255.0 Адаптер два: IP: 127.0.0.1, Маска: 255.0.0.0 (псевдоинтерфейс имени петли1)
Я знаю IP-адрес моего сервера и начать подключаться.
controller = new TcpClient();
controller.Connect(192.168.0.0, 5001);
.... //Continues when controller.Connected == true
static NetworkStream ns_controller = controller.GetStream();
ns_controller.WriteTimeout = 100;
ns_controller.ReadTimeout = 10;
После этого мое приложение записывало и считывало данные из сетевого потока в течение 800 секунд. Затем новые инструкции чтения заканчиваются в блоке перехвата:
try
{
byte[] r = new byte[100];
int anz = 0;
anz = ns_controller.Read(r, 0, r.Length);
}
catch (Exception ex)
{
//Output of the inner exception data and reset of communication
}
InnerException.ErrorCode: 10051 и InnerException.Message: операция с сокетом относится к недоступной сети
Когда я сбрасываю связь, потому что после ошибки сетевые адаптеры читаются через 100 мс после исключения снова с тем же кодом, что и в начале. Разница лишь в том, что IP-адрес и маска сети теперь "" пусты. После этого я закрыл заявку и попробовал снова. IP-адрес сетевого интерфейса снова был 192.168.0.153 и не изменился.
Я хочу спросить, была ли у кого-то еще эта проблема раньше и в чем причина проблемы? Я нашел только несколько вопросов о коде ошибки 10051, возникающем при подключении к серверу. Почему IP-адрес контроллера на короткое время может быть пустым, а затем снова иметь то же значение, что и раньше?
Я знаю, что не могу предоставить всю информацию, но надеюсь, что этого достаточно. Проблема в том, что предоставленная информация - все, что я записал в своем протоколе. Я не смог снова вызвать ошибку в другой раз, чтобы записать полную информацию. Любая помощь или подсказка приветствуется.