【问题标题】:More than 1 client in a udp echo serverudp 回显服务器中超过 1 个客户端
【发布时间】:2014-12-03 08:29:37
【问题描述】:

我有一个 UDP 回显客户端和服务器程序。当我尝试连接多个客户端以使用不同的计算机连接到服务器时,我得到了肯定的响应,即我能够将我的服务器与多个客户端连接。

所以,我的问题是,当我打破 ctrl+c 来打破服务器时,我想打印当时与服务器关联的所有客户端的 IP 地址。 我该怎么做?我知道如何在单个客户端连接到服务器时打印 IP 地址,但是如何为多个客户端打印?

【问题讨论】:

  • 你想要的有几个问题;首先“重载”CTRL-C 去做一些它不应该做的事情会让你的程序看起来很奇怪,你将如何取消/杀死程序?其次,由于它是 UDP,您实际上并没有来自客户端的 连接,但您仍然可以保留与服务器通信的所有客户端的列表。至于捕捉CTRL-C,请搜索术语signalbreak
  • UDP 是无连接的。 UDP 中没有“客户端连接到服务器”的概念。您可以在每次 UDP 通信时打印/存储每个客户端 IP,任何 UDP 消息都包含发送者的信息(IP+端口)。如果你使用recvfom,有参数可以填写这些信息。见:linux.die.net/man/2/recv

标签: c udp udpclient


【解决方案1】:

没有任何内置机制可以做到这一点。 UDP 是无连接的,因此套接字不会“记住”它们与谁通信。

要打印您的服务器与您通信的所有客户端,您需要自己跟踪它们。您可能需要一个集合(如果您不想自己构建一个集合,可以在 C 中找到一些开源的集合实现),甚至一个简单的链表也可以,具体取决于您的情况。在每个recvfrom 之后,将客户端添加到集合/列表中。处理完每个请求后,从集合/列表中删除客户端。

然后你需要设置一个处理程序来响应 ^C。您只需在其中打印集合/列表。

【讨论】:

    猜你喜欢
    • 2021-03-10
    • 1970-01-01
    • 2020-06-22
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多