c# - Tcp连接保持存活

标签 c# tcp

我正在创建一个客户端服务器应用程序。服务器已经设计好并等待来自客户端的连接。现在在客户端部分,我想在应用程序的整个生命周期中保持连接处于事件状态,并且连接仅在主客户端应用程序关闭或关闭或服务器关闭时关闭。

目前每 10 秒服务器关闭 TCP 连接。我尝试过

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) */
        }
    }
}

最佳答案

在调用 SetSocketOption() 时,KeepAliveSocketOptionLevel.Tcp 级别无效,而是使用 SocketOptionLevel。套接字

SetSocketOption( SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true );

关于c# - Tcp连接保持存活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18488562/

相关文章:

c# - 从EventHub读取特定消息

c# - MVC 4 Razor,带有部分 View 的发布表单

c# - 如何使用 CaSTLe Windsor WCF 设施限制服务?

c++ - 在 async_read 处理程序在服务器中返回错误后调用 boost::asio::tcp::socket 方法

python - 检测套接字关闭的原因 : FIN vs RST

c# - 线程安全的惰性初始化器;交换 Func<> 是一个好主意吗?

c# - 在 TreeView 中动态分组/嵌套平面数据

security - 通过未加密的 tcp/ip 安全传输密码

tcp - socat:获取发件人的IP地址

go - 到 TCP 服务器的多个连接