UDP中的Connect
阿新 • • 發佈:2019-02-17
標準的udp客戶端開了套介面後,一般使用sendto和recvfrom函式來發資料,實際上,udp傳送資料有兩種方法供大家選用的:
方法一:
socket----->sendto()或recvfrom()
方法二:
socket----->connect()----->send()或recv().(此時sendto,recvfrom仍可用)
從定義可以看出,sendto和recvfrom在收發時指定地址,而send和recv則沒有,那麼他們的地址是在那裡指定的呢,答案就在於connect函式。
在udp程式設計中,如果你只往一個地址傳送,那麼你可以使用send和recv,在使用它們之前用connect把它們的目的地址指定一下就可以了。connect函式在udp中就是這個作用,用它來檢測udp埠的是否開放的、沒有被使用的。
給UDP套介面呼叫connect,與TCP不同的是:沒有三路握手過程。核心只是檢查是否存在立即可知的錯誤(例如一個顯然不可達的目的地),記錄對端的IP地址和埠號(取自傳遞給connect的套介面地址結構),然後立即返回到呼叫程序
對於已連線UDP套接字,與預設的未連線套接字相比,發生了以下變化:
1. 我們不必使用recvfrom以獲悉資料報的傳送者,而改用read,recv或recvmsg,在一個已連線UDP套介面上由核心為輸入操作返回的資料 報僅僅是那些來自connect所指定協議地址的資料報。目的地為這個已連線UDP套介面的本地協議地址,發源地卻不是該套介面早先connect到的協 議地址的資料報,不會投遞到該套介面。這樣就限制了一個已連線UDP套介面而且僅能與一個對端交換資料報。
2.由已連線的UDP套介面引發的非同步錯誤返回給他們所在的程序。
UDP套接字多次呼叫connect可以為下列2個目的之一:
1.指定新的IP地址和埠號;
2.斷開套介面
EXAMPLE:
server繫結172.25.40.206和10086埠,監聽
Client呼叫Connect時,netstat結果:
udp 0 0 172.25.40.206:32862 172.25.40.206:10086 ESTABLISHED
udp 0 0 172.25.40.206:10086 *:*
Client沒有Connect時:
udp 0 0 *:32862 *:*
udp 0 0 172.25.40.206:10086 *:*
方法一:
socket----->sendto()或recvfrom()
方法二:
socket----->connect()----->send()或recv().(此時sendto,recvfrom仍可用)
從定義可以看出,sendto和recvfrom在收發時指定地址,而send和recv則沒有,那麼他們的地址是在那裡指定的呢,答案就在於connect函式。
在udp程式設計中,如果你只往一個地址傳送,那麼你可以使用send和recv,在使用它們之前用connect把它們的目的地址指定一下就可以了。connect函式在udp中就是這個作用,用它來檢測udp埠的是否開放的、沒有被使用的。
給UDP套介面呼叫connect,與TCP不同的是:沒有三路握手過程。核心只是檢查是否存在立即可知的錯誤(例如一個顯然不可達的目的地),記錄對端的IP地址和埠號(取自傳遞給connect的套介面地址結構),然後立即返回到呼叫程序
對於已連線UDP套接字,與預設的未連線套接字相比,發生了以下變化:
1. 我們不必使用recvfrom以獲悉資料報的傳送者,而改用read,recv或recvmsg,在一個已連線UDP套介面上由核心為輸入操作返回的資料 報僅僅是那些來自connect所指定協議地址的資料報。目的地為這個已連線UDP套介面的本地協議地址,發源地卻不是該套介面早先connect到的協 議地址的資料報,不會投遞到該套介面。這樣就限制了一個已連線UDP套介面而且僅能與一個對端交換資料報。
2.由已連線的UDP套介面引發的非同步錯誤返回給他們所在的程序。
UDP套接字多次呼叫connect可以為下列2個目的之一:
1.指定新的IP地址和埠號;
2.斷開套介面
EXAMPLE:
server繫結172.25.40.206和10086埠,監聽
Client呼叫Connect時,netstat結果:
udp 0 0 172.25.40.206:32862 172.25.40.206:10086 ESTABLISHED
udp 0 0 172.25.40.206:10086 *:*
Client沒有Connect時:
udp 0 0 *:32862 *:*
udp 0 0 172.25.40.206:10086 *:*