Я создаю клиентское серверное приложение. сервер уже разработан и находится в ожидании подключения от клиента. Теперь в разделе клиента я хотел бы сохранить соединение в течение всей жизни приложения, и соединение закрывается только при закрытии или завершении основного клиентского приложения или закрытии сервера.Tcp connection Keep alive
В настоящее время каждые 10 секунд сервер закрывает TCP connection.I попытался с
socket.SetSocketOption(SocketOptionLevel.Tcp, SocketOptionName.KeepAlive, true);
, но он не работает для меня .. Ниже мой код блока
public TCPStreamDevice(string RemoteIPAddress, int RemotePort, string SourceIPAddress, int SourcePortNo)
{
mIpAddress = RemoteIPAddress;
mPort = RemotePort;
mClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPEndPoint LocalEndPoint = new System.Net.IPEndPoint(System.Net.IPAddress.Parse(SourceIPAddress), SourcePortNo);
mClient.Bind(LocalEndPoint);
mDataReceivedCallback = new AsyncCallback(DataReceivedTCPCallback_Handler);
mBuffer = new byte[1024];
Description = new DeviceDescription();
}
и в у меня есть:
private void DataReceivedTCPCallback_Handler(IAsyncResult ar)
{
try
{
Socket client = (Socket)ar.AsyncState;
int bytesReceived = client.EndReceive(ar);
if (bytesReceived > 0)
{
//to know transport level errors
//EngineInterface.reponseReceived(mBuffer, false);
ReceiveCallBackFunc(mBuffer, bytesReceived);
client.BeginReceive(mBuffer, 0, 1024, SocketFlags.None, DataReceivedTCPCallback_Handler, client);
}
else
{
//disconnect
/* when there is no datapacket means no TCP connection is alive now (how can i keep Tcp alive here) */
}
}
}
Возможно, сервер закрывает соединение. когда превышается тайм-аут, вы ничего не можете сделать, кроме отправки некоторых данных в течение 10 секунд. Полученные 0 байтов означают, что другая сторона отключена. –
есть ли способ, с помощью которого я могу возобновить сеанс TCP? –
Вам нужно будет снова подключиться, когда вам нужно. Это обычное поведение для загруженных серверов. –