1. 程式人生 > >UDP中使用bind和connect的作用

UDP中使用bind和connect的作用

1:UDP中可以使用connect系統呼叫


2:UDP中connect操作與TCP中connect操作有著本質區別。


TCP中呼叫connect會引起三次握手,client與server建立連結.UDP中呼叫connect核心僅僅把對端ip&port記錄下來.


3:UDP中可以多次呼叫connect,TCP只能呼叫一次connect.  


UDP多次呼叫connect有兩種用途:1,指定一個新的ip&port連結. 2,斷開和之前的ip&port的連結.


指定新連結,直接設定connect第二個引數即可.


斷開連結,需要將connect第二個引數中的sin_family設定成 AF_UNSPEC即可. 




4:UDP中使用connect可以提高效率.原因如下:


普通的UDP傳送兩個報文核心做了如下:#1:建立連結#2:傳送報文#3:斷開連結#4:建立連結#5:傳送報文#6:斷開連結


採用connect方式的UDP傳送兩個報文核心如下處理:#1:建立連結#2:傳送報文#3:傳送報文另外一點,  每次傳送報文核心都由可能要做路由查詢.


5:採用connect的UDP傳送接受報文可以呼叫send,write和recv,read操作.當然也可以呼叫sendto,recvfrom.


呼叫sendto的時候第五個引數必須是NULL,第六個引數是0.呼叫recvfrom,recv,read系統呼叫只能獲取到先前connect的ip&port傳送的報文. 





UDP中使用connect的好處:1:會提升效率.前面已經描述了.2:高併發服務中會增加系統穩定性.原因:假設client A 通過非connect的UDP與server B,C通訊.B,C提供相同服務.為了負載均衡,我們讓A與B,C交替通訊.A 與 B通訊IPa:PORTa <----> IPb:PORTb;


A 與 C通訊IPa:PORTa' <---->IPc:PORTc 


假設PORTa 與 PORTa'相同了(在大併發情況下會發生這種情況),那麼就有可能出現A等待B的報文,卻收到了C的報文.導致收報錯誤.解決方法內就是採用connect的UDP通訊方式.在A中建立兩個udp,然後分別connect到B,C.

對一個UDP的套介面多次呼叫connect的情況如何?

  • 連線新的IP和埠
  • 斷開前面的連線

第一個目的不同於TCP連線connect的使用:對於TCP連線,connect只能呼叫一次;針對UDP則可以connect到不同的server,eg:client需要和多個伺服器同時通訊。

第二個目的為了斷開一個已連線的UDP連線,再次呼叫connect時,把套接字地址結構的地址簇成員(IPv4為sin_family,IPv6為sin6_family),設定為AF_UNSPEC即可。

效能:當程序知道自己要給同一個目的地址傳送多個數據報時,顯式連線套接字效率更高。

而臨時連線未連線的UDP套接字大約會消耗每個UDP傳輸三分之一的開銷。

相關推薦

UDP使用bindconnect作用

1:UDP中可以使用connect系統呼叫2:UDP中connect操作與TCP中connect操作有著本質區別。TCP中呼叫connect會引起三次握手,client與server建立連結.UDP中呼叫connect核心僅僅把對端ip&port記錄下來.3:UDP中可以多次呼叫connect,TCP

記:巨集定義的###的作用

核心中有很多的巨集定義,在巨集定義define中經常看到兩個字串##和#,這裡把它的用法做一下說明:  一、 ##是一個連線符號,用於把引數連在一起         例如:          &n

define 語句的 # ## 的作用與區別

如題,特此記錄: # 是把引數字串化,## 是將兩個引數連為一個整體。 自己寫了一份測試程式碼,兩者之間的差別清晰可見: #include <iostream> #include <cstdlib> // 測試不帶 # 號的效果 #define

Pythonglobalnolocal作用域的理解

原創:https://www.cnblogs.com/z360519549/p/5172020.html python引用變數的順序: 當前作用域區域性變數-> 閉包函式外的函式中變數->當前模組中的全域性變數->python內建變數 。

spring@ResponseBody@JsonProperty作用

@ResponseBody         @ResponseBody表示返回json資料,用在controller中方法返回資料,一般用於非同步返回資料,比如ajax請求 @JsonProperty       @JsonProperty("unit_name")表示資料

jQuerybindlive的區別

原文地址:http://blog.sina.com.cn/s/blog_4a60ba9c01013rgu.html Jquery中繫結事件有三種方法:以click事件為例    (1)target.click(function(){});    (2)target.

linux 重定向的 &> >的作用

一、linux重定向的裝置程式碼   標準輸入(stdin) 程式碼為 0 ,實際對映關係:/dev/stdin -> /proc/self/fd/0     標準輸出(stdout)程式碼為 1 , 實際對映關係:/dev/stdout -> /p

Android MediaCodec類dequeueInputBufferqueueInputBuffer作用

queueInputBuffer和dequeueInputBuffer是一對方法,兩個要在一起使用哦。首先,這一對函式的應用場合是對輸入的資料流進行編碼或者解碼處理的時候,你會通過各種方法獲得一個ByteBuffer的陣列,這些資料就是準備處理的資料。你要通過自己的方法找到你要處理的部分,然後呼叫deque

udpconnect()&bind()

connect()&bind()的作用 udp udp connect() #include <sys/types.h> #include <sys/socket.h> int conne

call() 、 apply() 、bind()方法的作用區別!

調用 權威指南 () 使用 func 開始 把他 對象 bsp 從一開始,我是在書上看到關於bind()、call() 和 apply(), 不過長久以來,在工作中與網上接觸到了很多關於這三個方法的使用場景,對這三個方法也算是比較熟悉了。所以把他們的作用和區別簡單闡述一下!

JavaScript變量、作用內存問題(JavaScript高級程序設計第4章)

外部 對象的引用 pan object 揮手 fun 可用內存 限制 argument 一、變量 (1)ECMAScript變量肯能包含兩種不同的數據類型的值:基本類型值和引用類型值。基本類型值指的是簡單的數據段,引用類型值指那些可能由多個值構成的對象。 (2)基本數據類型

BLE LL層 DataHeader NESNSN這兩個BIT的作用

是否 image blog 技術 是不是 流控 master ron 發包 在BLE包中,沒有發現幀號,但有NESN和SN用於區分是否新包,也可用於重傳。在Core4.2 V6-B-4.5.9 中有描述 可理解為: Master只更新SN Slave只更新N

JavaWebjsp九大內置對象 四大作用

app init web應用 order ble let web.xml context enter 九大內置對象為 page request response session exception config application out pag

JSP九大內置對象四大作用

parameter 文字 其他 fig ons this 單獨 內置 odin 一共有九大內置對象: request、response、out、session、application、pageContext、page、config、exception 內置對象(又叫隱含對象

javathis super關鍵字的作用

etag 傳遞 記錄 ont this spa 根據 普通 void emmmmmm也真的是好久沒有寫過java了,因為項目需要, 最近又必須重新拾起來了,雖然好多東西也都忘得差不多了.... 然後發現 竟然把super和this傻傻分不清.... 開個帖子記錄一下: 一、

[轉]分析MySQL數據類型的長度【mysql數據字段 lengthdecimals的作用!熟悉mysql必看】

一個 不足 rop asp 接受 enum webp 0 rows varchar 你看到的這個文章來自於http://www.cnblogs.com/ayanmw 轉載自:http://blog.csdn.net/daydreamingboy/article/detail

pythonglobal nonlocal 的作用

全局變量python引用變量的順序: 當前作用域局部變量->外層作用域變量->當前模塊中的全局變量->python內置變量 。global一、在局部如果聲明全局變量,可以對全局變量修改,否則不行gcount = 0def global_test():global gcountgcount+

muduo庫的核心:std::bindstd::function

muduo main ons 源碼 綁定 func 靜態成員 con 函數 最近在讀完陳碩大牛的《Linux多線程服務端編程》以及muduo源碼後,對其中的一些實現細節有著十分深刻的印象,尤其是使用std::bind和std::function的回調技術。可以說,這兩個大殺

Linux引號的一些作用它們的區別以及檢查端口的一些命令與方法

雙引號 linux 檢查 ssh tracert 分享 inux 們的 不同 今天分享一下Linux中單引號、雙引號、反引號的區別,單引號的作用就是 單引號裏面的內容會原封不動的輸出 (所見所得),雙引號 與單引號類似 不同的就是裏面的特殊符號會被解析(運行),反引號 優先

java 序列化的作用好處

java 中序列化的作用和好處 2017年06月21日 01:55:53 雪人先生1234 閱讀數:5652更多 個人分類: Java 1、序列化是幹什麼的? 簡單說就是為了儲存在記憶體中的各種物件的狀態,並且可以把儲存的物件狀態再讀出來。雖然你可以