2013-02-15 56 views
0

我是從實際意義上問的。在TCP中,accept()會爲每個connect()提供新的套接字。它允許只有一個服務器端口的多個併發通信。爲什麼UDP沒有「accept()」?

問題是爲什麼我們在UDP中沒有這樣的便利?不要告訴我UDP是無連接的,因此...從邏輯上講,accept()與此無關(底層IP無論如何都是無連接的)。

其中一個後果是,您必須應用大量的UDP端口,這可能會使防火牆設置複雜化。所以我的下一個問題是,關於端口和多路複用的多客戶端UDP應用程序的解決方案是什麼?在某些情況下,我想在UDP數據包中嵌入客戶端信息並讓服務器區分。但是固有地不接受(),某些待辦事項很難(例如,使用OpenSSL的UDP)。

謝謝你的洞察力。

+1

'accept()'有**所有事情都與TCP有連接。 accept()的全部意義是獲得一個只包含來自**的數據的流,該連接按順序不丟失或重複。 – 2013-02-15 22:59:04

回答

3

因爲UDP是無連接協議,所以你不需要它。您可以通過每個傳入的UDP數據報獲得遠程地址信息,因此您知道它來自哪裏,因此您不需要每個連接套接字來告訴您。你根本不需要應用大量的UDP端口。你只需要一個。

+0

還因爲每個UDP數據報都是獨立的,它不是數據流的一部分。所以除了從套接字中讀取數據之外,沒有特定於套接字的工作可以執行。 – 2013-02-15 22:56:49

+0

+1爲「您可以獲得每個傳入UDP dgram的遠程地址信息。」我需要那個。 – jessicaraygun 2013-07-30 17:05:47