我正在创建一个接受 TCP 和 UDP 连接的聊天服务器。现在假设服务器只允许单个客户端连接;还没有人可以聊天。
但是我该怎么做呢?
int sock = socket( PF_INET, SOCK_STREAM, 0 );
据我了解,设置的本质区别是——
int sock = socket( PF_INET, SOCK_DGRAM, 0 );
但是我如何同时做这两个呢?设置两个端口并在两个端口上交替监听以进行连接?
我正在创建一个接受 TCP 和 UDP 连接的聊天服务器。现在假设服务器只允许单个客户端连接;还没有人可以聊天。
但是我该怎么做呢?
int sock = socket( PF_INET, SOCK_STREAM, 0 );
据我了解,设置的本质区别是——
int sock = socket( PF_INET, SOCK_DGRAM, 0 );
但是我如何同时做这两个呢?设置两个端口并在两个端口上交替监听以进行连接?
看看 select() 函数。它允许“观察”多个文件描述符。提示:UDP 没有连接,因此您没有“侦听器”套接字。对于 TCP,您打开一个侦听器套接字,在该套接字上可以接受连接。您可以使用 select() 来观看“监听”套接字。
TCP和UDP是两个不同的东西。TCP 确保数据被发送,并保证交付。但是,UDP 不提供此功能。因为它们不同,接收数据的方式也不同,所以必须设置两个ServerSocket。一个处理 TCP 连接,另一个处理 UDP 连接。
我的建议是在发送重要信息时不要使用 UDP,因为它不可靠并且不能保证您希望发送的数据的交付。但是,如果绝对有必要同时使用 TCP 和 UDP 协议,那么我建议对服务器进行多线程处理,以便它侦听这两种类型的连接,并同时接受它们。
注意:您是否注意到网站可以以 http:// 和 https:// 开头?目的相同,但发送的数据类型不同,使用不同的端口号(http 为 80,https 为 443)。这只是关于为什么您需要服务器托管在两个不同端口上的快速解释。