networking - TCP作为连接协议(protocol)问题

标签 networking tcp

我不确定这里问的地方是否正确,如果不正确请原谅我。

我正在编写需要连接到服务器的计算机监控软件。服务端可以发出比较紧急的信息,比如声音或者取消闹钟,客户端可以发出电脑的数据,比如截图。客户端发送的数据在时间上并不太重要,但不应超过两分钟。

不需要设置端口转发对软件来说是必不可少的,并且假设互联网连接将通过几乎所有时间都具有 NAT 的无线路由器完成。

我的想法是从客户端发起一个 TCP 连接,并使用它来传输数据。理想情况下,我不会在不需要时发送任何数据,但我认为这是不可能的。时不时地发送相当于 ping 的命令是否可以保持连接有效?如果此程序一直在计算机上运行,​​它将使用什么样的带宽?此外,是否有可能减少这些 keep-alive 的 header 大小?

在我开始设计通信和编程之前,这个连接计划是否有缺陷?有更好的选择吗?

谢谢!

最佳答案

1) 您不需要发送“ping”数据来保持连接有效,TCP 堆栈会自动执行此操作;发送“ping”数据的一个原因是检测客户端关闭的连接——通常只有当您尝试从套接字读取/写入时才会发现出现问题。可能有一种方法可以更改各种超时,以便您可以更快地检测到这种情况。

2) 通常,虽然 TCP 提供面向流的无错误 channel ,但它不保证及时性,如果您在 Internet 上使用它,则更加不可预测。

3) 对于这样的应用程序(我希望您是出于道德目的而制作它)- 我倾向于使用 TCP,因为您不希望出现客户端收到数据包以发出警报但错过的情况一个会再次将其关闭。

关于networking - TCP作为连接协议(protocol)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21148538/

相关文章:

c# - 套接字客户端类的异常与结果代码

C++ 应用程序 : Is it possible to pass accepted TCP connection from one process to another?

c - Safari 无法与我的 TCP 服务器配合使用

linux - libpcap 如何从驱动程序接收数据包?

c# - 我怎样才能得到可用的带宽率?

python - 如何使用 python 选择用于多播的网络接口(interface)

c# - 连接到网络共享时如何提供用户名和密码

java - Network Mapper软件的最佳平台和编程语言

TCP:半关闭连接上的数据

c - 为什么服务器在关闭客户端连接时进入无限循环