2012-04-11 153 views
1

我正在创建一个接受TCP和UDP连接的聊天服务器。现在假设服务器只允许单个客户端连接;没有人可以聊天。接受TCP和UDP连接?

但我该怎么做?

int sock = socket(PF_INET, SOCK_STREAM, 0); 

据我了解,在安装的本质区别是this--

int sock = socket(PF_INET, SOCK_DGRAM, 0); 

但我怎么做的同时两者兼而有之?设置两个端口并交替监听连接?

回答

1

看看select()函数。它允许“观看”多个文件描述符。提示:UDP没有连接,所以你没有'监听'套接字。对于TCP,您打开一个侦听器套接字,可以接受连接。您可以使用select()来观看'listen'套接字。

-1

TCP和UDP是两个不同的东西。 TCP确保数据被发送,并保证传送。但是,UDP不提供此功能。由于它们不同且数据收到的方式不同,因此必须设置两个ServerSocket。一个用于处理TCP连接,另一个用于处理UDP连接。

我的建议是在发送重要信息时不要使用UDP,因为它不可靠,并且不保证您希望发送的数据的传送。但是,如果绝对有必要同时使用TCP和UDP协议,那么我建议多线程服务器,以便它监听这两种类型的连接,并接受它们两者。

注意:您是否注意到网站可以以http://和https://开头?目的地相同,但发送的数据类型不同,并使用不同的端口号(80代表http,443代表https)。这只是一个快速解释,为什么你需要服务器在两个不同的端口上进行托管。

+1

-1建议不要使用UDP和多线程建议(为什么不只是使用类似select?) - 也许你应该删除第二段。 :-p – 2012-04-11 21:41:36

+0

在某种程度上他是对的 - 我们需要多线程。我只是不担心这一点。 – Aerovistae 2012-04-11 21:44:40

+0

但我们也需要使用UDP。没有选择。 – Aerovistae 2012-04-11 21:45:00