作者:Kluter | 来源:互联网 | 2023-09-09 20:27
我想用c语言编写udp聊天服务器。我以前写过tcp聊天服务器,没关系。在tcp服务器中,accept函数返回一个fd号,服务器根据这个fd号与特定客户端通信。但是在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之后
以上就是c/c++开发分享c中的udp聊天服务器相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注(编程笔记)。