c中的udp聊天服务器

我想用c语言编写udp聊天服务器。 我以前写过tcp聊天服务器,没关系。

在tcp服务器中,accept函数返回一个fd号,服务器根据这个fd号与特定客户端通信。

但是在udp中,我怎么能听一个特定的客户?

在我的tcp服务器中,在客户端连接到服务器之后,创建一个线程并监听该客户端。 因此对于每个客户端,都有一个线程根据从accept函数返回的fd号进行监听。 所以任何消息都可以根据这个fd号发送给特定的客户端。

我怎样才能在udp服务器中实现这一点?

谢谢你的回答。

您使用recvfrom查找源IP /端口,然后使用sendto进行回复。 您只需要bind以选择服务器端口。 你不accept 。 UDP的所有connect都设置为默认目标(您计划使用sendto覆盖)。

这很简单。 如你所知UDP是无连接的,它可能共享同一个端口。所以想法就在这里。只需为每个客户端创建线程。如果你有更多的CPU核心,它会很棒。你可以将每个核心用于特定数量的客户端。 (它可以通过map完成)现在当同一个客户端再次敲响时,只需将他发送到该线程和核心。所以如果你有1 … n核心,你必须创建n线程,并为每个线程设置cpu。

我已经用这种方式对8核心服务器进行了实验,并且工作正常。

几天之后,我将这些代码放在我的博客上,然后把它解决为千兆交换机.. 🙂

matrixsust.blogspot.com

希望能帮助到你。

只需创建一个UDP套接字并调用connect()即可。 但你不想这样做。 UDP服务器的全部乐趣在于它们只需要一个套接字。 想一想。 您只需要TCP中的线程,因为您必须拥有专用套接字,而专用线程是最简单(而不是唯一)处理它的方式。 在UDP中,您可以jst继续从同一个套接字读取,源地址告诉您每个图表来自哪个客户端。

我用recvfrom和sendto函数。 首先,客户端通过sendto向服务器发送消息。 和服务器通过recvfrom接收消息。 在recvfrom中,我通过sockaddr_in struct获取客户端的地址。 在我无法绑定此并使用sendto之后