




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、如何實現(xiàn)UDP編程及通訊方式UDP是User Datagram Protocol的簡稱,中文名是用戶數(shù)據(jù)報協(xié)議,是Interconnection ,開放式系統(tǒng)互聯(lián) ) 參考模型中一種無連接的傳輸層協(xié)議, 息傳送服務(wù),IETF RFC 768是UDP的正式規(guī)范。UDP在 IP報文的協(xié)議號是OSI(Open System提供面向事務(wù)的簡單不可靠信17。在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。在 輸層,處于IP協(xié)議的上一層。UDPW不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進行排序的缺點, 當(dāng)報文發(fā)送之后,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)
2、絡(luò)應(yīng)用。包括網(wǎng)絡(luò)視頻會議系統(tǒng)在內(nèi)的眾多的客戶 / 服務(wù)器模式的網(wǎng)絡(luò)應(yīng)用都需要使用OSI模型中,在第四層一一傳也就是說,UDP協(xié)議。UDP協(xié)議從問世至今已經(jīng)被使用了很多年,雖然其最初的光彩已經(jīng)被一些類似協(xié)議所掩蓋,但是即使是在今天 仍然不失為一項非常實用和可行的網(wǎng)絡(luò)傳輸層協(xié)議。UDP既然有了保證可靠傳輸?shù)?TCP協(xié)議,為什么還要非可靠傳輸?shù)?UDP協(xié)議呢?主要的原因有兩個。 靠的傳輸是要付出代價的,對數(shù)據(jù)內(nèi)容正確性的檢驗必然占用計算機的處理時間和網(wǎng)絡(luò)的帶寬,因此 傳輸?shù)男什蝗鏤DP高。二是在許多應(yīng)用中并不需要保證嚴(yán)格的傳輸可靠性,比如視頻會議系統(tǒng),并不要 求音頻視頻數(shù)據(jù)絕對的正確,只要保證連貫
3、性就可以了,這種情況下顯然使用UDP會更合理一些。一是可TCP在選擇使用協(xié)議的時候,選擇 UDP必須要謹(jǐn)慎。在網(wǎng)絡(luò)質(zhì)量令人十分不滿意的環(huán)境下,UDP協(xié)議數(shù)據(jù)包丟失會比較嚴(yán)重。但是由于 UDP的特性:它不屬于連接型協(xié)議,因而具有資源消耗小,處理速度快的優(yōu)UDP較多,因為它們即使偶爾丟失一兩個數(shù)據(jù)包,也不 ICQ和QC就是使用的UDP協(xié)議。點,所以通常音頻、視頻和普通數(shù)據(jù)在傳送時使用會對接收結(jié)果產(chǎn)生太大影響。比如我們聊天用的UDP編程的服務(wù)器端一般步驟是:1、創(chuàng)建一個 socket ,用函數(shù) socket();2、設(shè)置 socket 屬性,用函數(shù) setsockopt();*可選3、綁定 IP 地
4、址、端口等信息到 socket 上,用函數(shù) bind();4、循環(huán)接收數(shù)據(jù),用函數(shù) recvfrom();5、關(guān)閉網(wǎng)絡(luò)連接 ;UDP編程的客戶端一般步驟是:1、創(chuàng)建一個 socket ,用函數(shù) socket();2、設(shè)置 socket 屬性,用函數(shù) setsockopt();*可選3、綁定 IP 地址、端口等信息到 socket 上,用函數(shù) bind();* 可選4、設(shè)置對方的 IP 地址和端口等屬性 ;5、發(fā)送數(shù)據(jù),用函數(shù) sendto();精品6、關(guān)閉網(wǎng)絡(luò)連接 ;UDP通訊服務(wù)器端源代碼如下:#include <stdio.h>#include <string.h>
5、#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <errno.h>#include <stdlib.h>#include <arpa/inet.h>int main(int argc, char *argv)struct sockaddr_in s_addr;struct sockaddr_in c_addr;int sock;socklen_t addr_len;int len;char buff128;/* 創(chuàng)建
6、socket ,關(guān)鍵在于這個 SOCK_DGRAM */if (sock = socket(AF_INET, SOCK_DGRAM, 0) = -1) perror("socket");exit(errno); elseprintf("create socket.nr");memset(&s_addr, 0, sizeof(struct sockaddr_in);/* 設(shè)置地址和端口信息 */s_addr.sin_family = AF_INET;if (argv2)s_addr.sin_port = htons(atoi(argv2);else
7、s_addr.sin_port = htons(7838);if (argv1)s_addr.sin_addr.s_addr = inet_addr(argv1);elses_addr.sin_addr.s_addr = INADDR_ANY;/* 綁定地址和端口信息 */if (bind(sock, (struct sockaddr *) &s_addr, sizeof(s_addr) = -1) perror("bind");exit(errno); elseprintf("bind address to socket.nr");/* 循環(huán)接
8、收數(shù)據(jù) */addr_len = sizeof(c_addr);while (1) len = recvfrom(sock, buff, sizeof(buff) - 1, 0,(struct sockaddr *) &c_addr, &addr_len);if (len < 0) perror("recvfrom");exit(errno);bufflen = '0'printf("收到來自 s:%d的消息:snr".inet_ntoa(c_addr.sin_addr), ntohs(c_addr.sin_port
9、), buff);return 0;客戶端源代碼如下:#include <stdio.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <errno.h>#include <stdlib.h>#include <arpa/inet.h>int main(int argc, char *argv)struct sockaddr_in s_addr;int s
10、ock;int addr_len;int len;char buff128;/* 創(chuàng)建 socket , 關(guān)鍵在于這個 SOCK_DGRAM */if (sock = socket(AF_INET, SOCK_DGRAM, 0) = -1) perror("socket");exit(errno); elseprintf("create socket.nr");/* 設(shè)置對方地址和端口信息 */s_addr.sin_family = AF_INET;if (argv2)s_addr.sin_port = htons(atoi(argv2);elses_a
11、ddr.sin_port = htons(7838);if (argv1)s_addr.sin_addr.s_addr = inet_addr(argv1);else printf(" 消息必須有一個接收者 !n");exit(0);/*發(fā)送UDP消息*/addr_len = sizeof(s_addr);strcpy(buff, "hello i'm here");len = sendto(sock, buff, strlen(buff), 0, (struct sockaddr *) &s_addr, addr_len);if (len < 0) printf("nrsend error.nr");return 3;printf("send success.nr");return 0;編譯程序用下列命令:gcc -Wall simple-udpserver.c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 勞動合同范本海南
- 2025年硬質(zhì)橡膠及其制品合作協(xié)議書
- 2025年孕產(chǎn)婦保健項目建議書
- 合伙酒店轉(zhuǎn)讓合同范本
- epc工程總價合同范本
- 信貸機構(gòu)合同范本
- 創(chuàng)業(yè)魔芋種植合作合同范本
- 合伙奶茶協(xié)議合同范本
- 低價手套租賃合同范本
- 南寧個人租房合同范本
- 人教版(2025新版)七年級下冊數(shù)學(xué)第七章 相交線與平行線 單元測試卷(含答案)
- DB37-T 5026-2022《居住建筑節(jié)能設(shè)計標(biāo)準(zhǔn)》
- DN900鋼管dn800E管定向鉆穿越京杭大運河施工方案
- 全套IECQ QC080000-2017 有害物質(zhì)過程管理體系程序文件
- 冀教版三年級數(shù)學(xué)下冊《第二單元第2課時 兩位數(shù)乘兩位數(shù)(進位)的乘法》教學(xué)課件PPT小學(xué)公開課
- 成都市入戶申請表
- 主題班會:預(yù)防流行性感冒課件
- 對外援助成套項目管理辦法(試行)
- 鐵路工程預(yù)算定額標(biāo)準(zhǔn)
- 管道吹掃、試壓檢驗批質(zhì)量驗收記錄表
- 教學(xué)教案、作業(yè)、記錄檢查記錄表
評論
0/150
提交評論