2、UDP中connect操作與TCP中connect操作有着本質區別。‘
TCP中調用connect會引起三次握手,client與server建立連結。
UDP中調用connect內核僅僅把對端ip&port記錄下來。
3、UDP中可以多次調用connect,TCP只能調用一次connect。
對於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()