C语言中基于UDP的聊天

C语言中基于UDP的聊天,c,sockets,udp,port,ip-address,C,Sockets,Udp,Port,Ip Address,我应该用C语言制作一个基于dgrams的通讯器。我不知道应该将哪些参数传递给bind()函数。我浏览了StackOverflow上的大多数UDP聊天问题和代码,但仍然找不到关于这个问题的任何具体信息 我应该使用什么类型的地址结构 我可以使用哪个端口?有大于1024的数字吗 我用什么IP地址绑定套接字?(大多数人都把它放在了Dr_ANY上,但它不只是为了接收吗?) 还有,我需要多个插座吗?一个用于接收消息,另一个用于发送消息 我应该使用什么类型的地址结构 如果您使用的是IPv4,请在中使用sock

我应该用C语言制作一个基于dgrams的通讯器。我不知道应该将哪些参数传递给bind()函数。我浏览了StackOverflow上的大多数UDP聊天问题和代码,但仍然找不到关于这个问题的任何具体信息

我应该使用什么类型的地址结构

我可以使用哪个端口?有大于1024的数字吗

我用什么IP地址绑定套接字?(大多数人都把它放在了Dr_ANY上,但它不只是为了接收吗?)

还有,我需要多个插座吗?一个用于接收消息,另一个用于发送消息

我应该使用什么类型的地址结构

如果您使用的是IPv4,请在中使用sockaddr\u。如果您想改用IPv6,请在6中使用sockaddru

我可以使用哪个端口?有大于1024的数字吗

是的,假设没有其他程序已经将该端口号用于自己的UDP套接字。(如果另一个程序正在使用您选择的端口号,它将导致bind()失败,并显示errno EADDRINUSE)

我用什么IP地址绑定套接字?(大多数人认为 INADDR_有,但它不是仅用于接收吗?)

InAdr_ANY是您通常想要使用的。它告诉操作系统您希望在任何计算机网络接口上接收传入的UDP数据包。(如果您只想从特定网络接口(例如仅在WiFi上)接收UDP数据包,则可以指定该网络接口的IP地址)

还有,我需要多个插座吗?一个用于接收,另一个用于接收 发送消息

如果需要,可以有多个套接字,但不必这样做。您可以改为使用单个套接字来发送和接收UDP数据包。一种常见的模式是使用一个设置为非阻塞模式的套接字,以及类似select()或poll()的东西来多路传输程序的输入和输出需求。另一种模式是使用两个线程(一个用于发送,一个用于接收)、阻塞I/O和一个或两个套接字(取决于您是希望两个线程共享一个套接字,还是为每个线程提供自己的套接字)。我自己更喜欢单线程/单套接字/select()解决方案,因为我认为它是最不容易出错的方法