我正在创建一个客户端服务器应用程序。服务器已经在设计并且在等待来自客户端的连接。现在,在客户端部分中,我希望在应用程序的整个生命周期中保持连接的活动状态,并且只有在主客户端应用程序关闭或关闭或服务器关闭时才会关闭连接。Tcp连接保持活着
目前每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会话? –
您必须在需要时重新连接。对于重载服务器,这是常见的行为。 –