我不确定这是否是正确的地方要问,所以请原谅我,如果不是。TCP作为连接协议问题
我正在写计算机监控软件,需要连接到服务器。服务器可能会发出相对紧急的消息,如声音或取消警报,客户端可能会发送有关计算机的数据,如屏幕截图。客户发送的数据在时间上并不太重要,但迟迟不会超过两分钟。
对于软件来说,不需要设置端口转发是非常重要的,并且假设互联网连接将通过几乎所有时间都具有NAT的无线路由器完成。
我的想法是从客户端启动TCP连接,并使用它来传输数据。理想情况下,我不会在没有需要时发送数据,但我相信这是不可能的。现在每隔一段时间发送一次ping就会保持连接活跃,如果此程序一直在计算机上运行,它将使用何种带宽?另外,是否有可能减少这些保活标题的大小?
在我开始设计通信和编程之前,这个连接计划是否有缺陷?有更好的选择吗?
谢谢!
除非您通过在套接字上启用保持连接来告知TCP堆栈,否则TCP堆栈不会自动发送ping。它默认是禁用的。 – EJP
不要担心,所有的透明和道德(将在GPL下发布)。如果我正确理解了第一部分,我可以打开一个连接,离开它几个小时,然后应该做些紧急的事情 - 比如警报 - 它可以立即访问? – Jacob
由于EJP指出您需要启用启用保持活动;是的,您可以连接并保持频道打开,并在需要时发送数据,但是,如果在发送连接之前该发生什么情况,该怎么办?最好的情况是消息会通过网络上的可用延迟传递到另一端 - 最糟糕的情况是,延迟时间延长,延迟时间延长,超时,需要重新连接,或者另一端下降,你将不得不做出几次尝试,我会倾向于采取平均情况,但最好记住最坏的情况。 – wmercer