Я пытаюсь подключиться к оборудованию через TCP / IP. Я сделал это очень гладко в VB и пытаюсь добиться того же результата в C #.
Код выглядит так:
internal Socket connectSocket(IPEndPoint vIPEndPoint)
{
Socket lclSocket = new Socket(vIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
try
{
lclSocket.Connect(vIPEndPoint);
}
catch (Exception ex)
{
}
if (lclSocket.Connected)
{
string str = receiveResponse(lclSocket);
if (str.Contains(PFCommonVariables.m_strCommandDelimiter))
{
_sockets.Add(vIPEndPoint, lclSocket);
}
else
{
lclSocket.Disconnect(true);
}
}
lclSocket.ReceiveTimeout = RECEIVE_TIMEOUT;
lclSocket.SendTimeout = SEND_TIMEOUT;
return lclSocket;
}
Как я уже сказал, этот код точно такой же, как код в VB, и там я могу сохранить успешное соединение. Проблема в C # заключается в том, что сразу после вызова socket.Connect, который я делаю в IPEndPoint, свойство Connected показывается как True. Я также проверяю успешную отправку и получение данных через Wireshark. Затем я ставлю точку останова в операторе if (lclSocket.Connected). Когда я впервые прихожу сюда, свойство Connected все еще имеет значение True. Однако, если я подожду здесь 1-2 секунды, ничего не делая, свойство Connected станет false.
Итак, соединение теряется автоматически. Затем, если я оставлю отладчик включенным и буду ждать в очереди, в Wireshark я вижу многочисленные TCP-сообщения Keep-Alive, которые регулярно пересылаются между ПК и оборудованием. Я не судюсь, что это, но они могут помочь диагностировать проблему ...