Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#tcp客户端如何启动tcp/ip保持功能_C#_Tcpclient - Fatal编程技术网

C#tcp客户端如何启动tcp/ip保持功能

C#tcp客户端如何启动tcp/ip保持功能,c#,tcpclient,C#,Tcpclient,当我设定 socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true); socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null); 好的,我发现它有效!Bug当我使用wireshark观察数据时,我发现包的长度是1,值是00。 当我看到keepalive协议时,长度将为0。这个问题困扰了我很长时间。谁能帮我一

当我设定

socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
socket.IOControl(IOControlCode.KeepAliveValues, inOptionValues, null);
好的,我发现它有效!Bug当我使用wireshark观察数据时,我发现包的长度是1,值是00。 当我看到keepalive协议时,长度将为0。这个问题困扰了我很长时间。谁能帮我一下吗?

为什么数据包长度应为0?阅读一下keepalive,我发现服务器发送的数据包设置了ACK标志,其他什么都没有,所以长度为1看起来很好keepalive功能在传输层不是很有用。如果远程进程处于死锁状态或其他僵尸状态,该怎么办?你会觉得一切都很好,但事实并非如此。您必须在自己的通信协议中引入ping,只有这样您才能知道对方已准备好接收您的消息。我查看了RFC 1122中有关keepalive机制的内容。它说:“如果实现了保持活动机制,则实现应发送没有数据的保持活动段;但是,为了与错误的TCP实现兼容,可以配置发送包含一个垃圾八位组的保持活动段”,这意味着我们可以配置该段吗?问题是如何使用C#tcpclient配置该段