網路程式設計 UDP

2021-08-10 13:12:21 字數 2334 閱讀 2675

網路程式設計傳輸層選擇乙個資料控制模式:tcp或者udp,前面我們已經介紹了tcp程式設計,這篇我們簡單的來看看udp程式設計。udp是無連線的不可靠的資料報服務。

udp協議在ip協議上增加了復用、分用和差錯檢測功能。udp的特點:

a)是無連線的。相比於tcp協議,udp協議在傳送資料前不需要建立連線,當然也就沒有釋放連線。

b)是盡最大努力交付的。也就是說udp協議無法保證資料能夠準確的交付到目的主機。也不需要對接收到的udp報文進行確認。

c)是面向報文的。也就是說udp協議將應用層傳輸下來的資料封裝在乙個udp包中,不進行拆分或合併。因此,運輸層在收到對方的udp包後,會去掉首部後,將資料原封不動的交給應用程序。

d)沒有擁塞控制。因此udp協議的傳送速率不受網路的擁塞度影響。

e)udp支援一對

一、一對多、多對一和多對多的互動通訊。

f)udp的頭部占用較小,只占用8個位元組。

1、udp報頭:

16位目的埠:告訴主機應該將報文傳送給哪乙個上次協議或者應用程式。

16位資料報長度:標明udp頭部和udp資料的總長度位元組。

16位校驗值:

用來對udp頭部和udp資料進行校驗。和tcp不同的是,對udp來說,此字段是可選項,而tcp資料段中的校驗和字段是必須有的。

資料:上層的資料。

2、資料報服務

udp被稱為不可靠協議,但它的傳輸資料的速度快。udp不排序所要傳送的資料段.不關心這些資料段到達目的方時的順序。udp在傳送完資料段後,就忘記它們。它不去進行這些後續工作,如去核對它們,或者產生乙個安全抵達的確認,它完全放棄了可以保障傳送可靠性的操作,所以它的傳輸速度相比較tcp而言就快很多。

3、不可靠的

相比較tcp而言udp的報頭少了很多資訊,這就使得它是不可靠的。它沒有序號和確認號用來保證報文的完整和有序,也沒有6位標誌位以及視窗大小,進行流量控制,這就很容易導致報文的丟失和遺棄。

udp 的程式設計流程:

伺服器: socket   bind   recvfrom/sendto    close

客戶端: socket    sendto/recvfrom     close

socket、bind、close函式的用法和tcp程式設計一樣,在這裡就不進行過多的說明。recvfrom和sendto稍有區別,增加了兩個引數。

int  recvfrom(int sockfd,  void * buff,  int  len, int  flag,struct  sockaddr *src_addr,  int * addr_len);

int  sendto(int  sockfd,  void * buff,  int  len,  int  flag,struct  sockaddr* dest_addr,  int  addr_len);

下面我們寫乙個簡單的例子:

udp_ser.c:

#include #include #include #include #include #include #include #include void main()

; int len=sizeof(cli);

recvfrom(sockfd,buff,127,0,(struct sockaddr*)&cli,&len);

printf("ip::%s\nport:%d\ndata::%s\n",

inet_ntoa(cli.sin_addr),ntohs(cli.sin_port),buff);

// printf("recv::%s\n",buff);

sendto(sockfd,"i know",sizeof("i know"),0,(struct sockaddr*)&cli,

len);

} close(sockfd);

}

udp_cli.c

#include #include #include #include #include #include #include #include void main()

; recvfrom(sockfd,buff,127,0,null,null);

printf("recv::%s\n",buff);

close(sockfd);

}

執行結果:

UDP網路程式設計

基於udp 伺服器 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到socket上,用函式bind 3.迴圈接收資料,用recvfrom 4.關閉網路連線。基於udp 客戶端 程式步驟 1.建立乙個socket,用socket 函式 2.繫結ip位址 埠等資訊到...

UDP網路程式設計

基於udp 通訊模型 由上圖可以看出udp通訊的步驟如下 基於udp 伺服器 1 建立乙個socket,用函式socket 2 繫結ip位址 埠等資訊到socket上,用函式bind 3 迴圈接收資料,用函式recvfrom 4 關閉網路連線 基於udp 客戶端 1 建立乙個socket,用函式so...

網路程式設計 UDP

一 udp協議 1 udp協議 udp與tcp一樣,都屬於運輸層協議,udp為應用層提供不可靠 無連線的 基於資料報的服務。2 udp報頭 3 udp與tcp的比較 tcp 它是一種面向連線的,可靠的,流式服務。udp 它是一種無連線的,不可靠的,資料報服務 tcp的 可靠 tcp協議使用超時重傳 ...