2012-04-11 152 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