網路程式設計傳輸層選擇乙個資料控制模式: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協議使用超時重傳 ...