1. 程式人生 > >[轉]UDP和connect

[轉]UDP和connect

UDP是一個無連線的協議,因此socket函式connect似乎對UDP是沒有意義的,
然而事實不是這樣。

        一個插口有幾個屬性,其中包括協議,本地地址/埠,目的地址/埠。

          對於UDP來說,socket函式建立一個插口;bind函式指明瞭本地地址/埠
(包括ADDR_ANY,通配所有本地網路介面);connect可以用來指明目的地
址/埠;

         一般來說,UDP客戶端在建立了插口後會直接用sendto函式傳送資料,需要
在sendto函式的引數裡指明目的地址/埠。如果一個UDP客戶端在建立了插
口後首先用connect函式指明瞭目的地址/埠,然後也可以用send函式傳送
資料,因為此時send函式已經知道對方地址/埠,用getsockname也可以得
到這個資訊。

         UDP客戶端在建立了插口後會直接用sendto函式傳送資料,還隱含了一個操作,
那就是在傳送資料之前,UDP會首先為該插口選擇一個獨立的UDP埠(在1024
-5000之間),將該插口置為已繫結狀態。如果一個UDP客戶端在建立了插口後
首先用bind函式指明瞭本地地址/埠,也是可以的,這樣可以強迫UDP使用指
定的埠傳送資料。(事實上,UDP無所謂伺服器和客戶端,這裡的界限已經模
糊了。)

       UDP伺服器也可以使用connect,如上面所述,connect可以用來指明目的地址
/埠;這將導致伺服器只接受特定一個主機的請求。