如何實現(xiàn)UDP編程及通訊方式 華清遠見80匯總_第1頁
如何實現(xiàn)UDP編程及通訊方式 華清遠見80匯總_第2頁
如何實現(xiàn)UDP編程及通訊方式 華清遠見80匯總_第3頁
如何實現(xiàn)UDP編程及通訊方式 華清遠見80匯總_第4頁
如何實現(xiàn)UDP編程及通訊方式 華清遠見80匯總_第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論