UDP socket也可以使用connect系統調用


UDP socket也可以使用connect系統調用

 

UDP是一個無連接的協議,因此socket函數connect()似乎對UDP是沒有意義的,然而事實不是這樣。它可以用來指定本地端口和本地地址,來建立虛擬連接。
 
一個socket接口有幾個屬性,其中包括協議,本地地址/端口,目的地址/端口。

    對於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()可以用來指明目的地址/端口;這將導致服務器只接受特定一個主機的請求。

    方法一:

    socket()——>sendto()或recvfrom()

    方法二:

    socket()——>connect()——>send或recv()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM