У меня два приложения, одно подключается к другому через TCP Socket. У меня возникла проблема, и после долгого устранения неполадок я начал думать, что основная причина связана с отключением Socket, иначе Socket.state меняется на Disconnected.
Причины, по которым я пришел к вышеуказанному выводу, основаны исключительно на чтении кодов и их анализе. Мне нужно доказать, что это так, и поэтому мой вопрос: сталкивались ли вы когда-нибудь с таким типом проблемы, когда сокет на самом деле продолжает отключаться даже после попытки подключиться к ним?
Ниже приведен мой код Connect. У меня есть цикл, который постоянно проверяет состояние самого сокета. Если я обнаруживаю, что состояние «Отключено», я снова вызываю эту функцию Connect (). Каждый раз, когда я вызываю Connect (), я замечаю, что состояние моего сокета снова возвращается к Connected.
Итак, мои вопросы:
1. Have you seen this behavior yourself before?
2. Do you see any problem in me calling multiple Connect() again and again?
3. Is there a way to simulate this type of socket disconnections? I tried but I can't set the Socket.Connected flag.
public override void Connect()
{
try
{
sState = Defs.STATE_CONNECTING;
// send message to UI
string sMsg = "<Msg SocketStatus=\"" + sState + "\" />";
HandleMessage(sMsg);
// Create the socket object
sSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
string sIP = "";
// Define the Server address and port
if (Validate.IsIPAddress(sServer.ToString()))
{
sIP = sServer.ToString();
}
else
{
IPHostEntry iphost = Dns.GetHostEntry(sServer.ToString());
sIP = iphost.AddressList[0].ToString();
}
IPEndPoint epServer = new IPEndPoint(IPAddress.Parse(sIP), 1234);
// Connect to Server non-Blocking method
sSock.Blocking = false;
AsyncCallback onconnect = new AsyncCallback(OnConnect);
sSock.BeginConnect(epServer, onconnect, sSock);
}
catch (Exception ex)
{
LogException(new Object[] { ex });
}
}