【问题标题】:Constantly reading/writing data over a TCP/IP Port. Which one?通过 TCP/IP 端口不断读取/写入数据。哪一个?
【发布时间】:2011-05-31 18:53:46
【问题描述】:

不幸的是,我不太了解网络。我正在编写一个有两个版本的程序。一个服务器版本和一个客户端版本。让我们假设客户端版本安装在通过以太网连接到服务器的 20 台 PC 上。客户端版本需要不断地从服务器获取一些数据。数据是一种串行的。我想知道一种方法来广播每秒更新的数据并使其可供网络中的所有其他 PC 使用。我可以为此使用 HTTP 端口吗?例如将数据写入 HTML 页面或其他内容?或者有没有更好的端口或方法来做到这一点?

任何想法将不胜感激。

【问题讨论】:

  • 你在传输什么样的数据?

标签: http networking tcp network-programming


【解决方案1】:

这听起来像是一个非常简单的 TCP 套接字应用程序。服务器将设置为在特定端口上“侦听”(您选择端口号,例如 12345),每个客户端都会在该端口上与服务器建立 TCP 连接。

只要服务器有数据要发送,它就会向每个连接的客户端发送一次。这可能意味着服务器在不同的套接字上发送数据多达 20 次,但这没关系。客户端将从其连接的套接字读取数据到服务器。

还有其他替代方案,例如 UDP 甚至 UDP 多播,但这些通常最终会变得更加复杂,因为 UDP 不能保证数据包总是到达目的地(它们甚至可能是重复的或乱序的)。 TCP 确保您发送的数据要么以正确的顺序完整到达,要么根本不到达(在这种情况下,连接将被断开)。

这种多 TCP 连接的一个例子是VNC

VNC 广泛用于教育环境中,例如允许分布的一组学生同时查看教师正在操作的计算机屏幕,或允许教师控制学生的计算机以提供帮助。

【讨论】:

  • 对于 sockets/TCP 的新手来说,重要的是要注意,您传输的数据可能不会全部在同一个数据包中到达,或者多次传输可能会在同一个数据包中到达。 ZeroMQ 似乎是克服这个问题的一种简单方法,但我还没有尝试过。或者,您需要在协议中进行一些手动框架。
  • 谢谢。如果我们有很多数据要发送,可以吗?我的意思是 20 个客户每秒超过 10 个数字?
  • @Auxiliary:就现代网络而言,这实际上是非常少量的数据。
【解决方案2】:

有很多方法。你可以选择其中任何一个,但我认为,下面的文档会对你有很大帮助。

基于 TCP/IP 的多播 HOWTO:

http://www.ibiblio.org/pub/Linux/docs/howto/other-formats/html_single/Multicast-HOWTO.html#sect-trans-prots

【讨论】:

    猜你喜欢
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 2012-05-07
    • 1970-01-01
    • 2016-01-28
    • 2011-03-22
    • 2012-07-23
    • 1970-01-01
    相关资源
    最近更新 更多