Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.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# 优先套接字通信_C#_Sockets - Fatal编程技术网

C# 优先套接字通信

C# 优先套接字通信,c#,sockets,C#,Sockets,我在手机和PC(服务器)之间有一个客户机-服务器通信。 在通信中,我有四个套接字:其中两个用于发送和接收数据,另外两个用于某种形式的保持活动,因为我需要尽可能快地检测断开 只要连接正常,数据传输就不会出现任何问题。但是我想建立一些优先级,以确保keep-alive(记住:两个套接字)通道始终发送数据,除非服务器-客户机之间的连接断开 我怎样才能做到这一点 谢谢您的帮助。当使用TCP传输数据时,只要您尝试发送数据且(TCP)连接中断,TCP协议栈就会通知您。如果您同时控制服务器和客户机代码,则可以

我在手机和PC(服务器)之间有一个客户机-服务器通信。 在通信中,我有四个套接字:其中两个用于发送和接收数据,另外两个用于某种形式的保持活动,因为我需要尽可能快地检测断开

只要连接正常,数据传输就不会出现任何问题。但是我想建立一些优先级,以确保keep-alive(记住:两个套接字)通道始终发送数据,除非服务器-客户机之间的连接断开

我怎样才能做到这一点


谢谢您的帮助。

当使用TCP传输数据时,只要您尝试发送数据且(TCP)连接中断,TCP协议栈就会通知您。如果您同时控制服务器和客户机代码,则可以在TCP数据传输之间很好地实现心跳

如果各个设备上的TCP连接故障检测速度对于您的目的来说太慢,您可以在客户端和服务器之间实现一些单包乒乓方案,如“SNMP回显请求”也称为“ping”-或者如果SNMP不是一个选项,则可能来回发送UDP数据包就可以了


在任何情况下,您都需要某种超时机制(已在TCP堆栈中实现),这意味着断开连接的检测将被延迟,延迟时间以超时持续时间为界。

我会用四个套接字质疑您的设置

首先,在远程端死亡时使用单独的连接进行发现并没有给您带来任何好处,但实际上,当“保持活动”连接关闭但“数据”连接仍然完好无损时,会引入竞争条件。在没有活动的情况下,通过相同的数据连接实现周期性心跳

然后,相同节点之间的两个独立数据连接争夺带宽。网络堆栈通常不会跨连接边界进行优化,因此您会得到两倍的TCP开销,而没有任何收益。在同一个TCP连接上实现数据交换—您将获得更好的吞吐量(可能以延迟增加为代价,但只有良好的测量才能说明这一点)


最后,但并非最不重要的一点是,四个连接需要四个侦听TCP端口,因此可能在某个地方的防火墙上存在四个漏洞。将其简化为一个端口,防火墙的管理员将永远是您的朋友。

由于网络线路是共享的,您将遇到一些阻塞点。您是否考虑过线程和线程优先级来帮助增加心跳频率?