資源描述:
《UDP網(wǎng)絡(luò)聊天實(shí)驗》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、實(shí)用標(biāo)準(zhǔn)文檔計算機(jī)網(wǎng)絡(luò)原理實(shí)驗報告UDP網(wǎng)絡(luò)聊天程序設(shè)計班級:計算機(jī)1301班學(xué)號:1307010116姓名:席鳳凱文案大全實(shí)用標(biāo)準(zhǔn)文檔實(shí)驗五UDP網(wǎng)絡(luò)聊天程序設(shè)計一.實(shí)驗?zāi)康模壕幊淘O(shè)計基于UDP的簡單聊天室程序,實(shí)現(xiàn)服務(wù)器與客戶端之間的對話通信功能。二.實(shí)驗原理:網(wǎng)絡(luò)編程一般都是基于TCP或UDP的,一般過程如下:(1)TCP編程的服務(wù)器端與客戶端一般步驟:服務(wù)器端:1、創(chuàng)建一個socket,用函數(shù)socket();2、綁定IP地址、端口等信息到socket上,用函數(shù)bind();3、開啟監(jiān)聽,用函
2、數(shù)listen();4、接收客戶端上來的連接,用函數(shù)accept();5、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();6、關(guān)閉網(wǎng)絡(luò)連接;7、關(guān)閉監(jiān)聽;客戶端:1、創(chuàng)建一個socket,用函數(shù)socket();2、設(shè)置要連接的對方的IP地址和端口等屬性;3、連接服務(wù)器,用函數(shù)connect();4、收發(fā)數(shù)據(jù),用函數(shù)send()和recv(),或者read()和write();5、關(guān)閉網(wǎng)絡(luò)連接;(2)UDP編程步驟如下:服務(wù)器端:1、創(chuàng)建一個socket,用函數(shù)socke
3、t();2、綁定IP地址、端口等信息到socket上,用函數(shù)bind();3、循環(huán)接收數(shù)據(jù),用函數(shù)recvfrom();4、關(guān)閉網(wǎng)絡(luò)連接;客戶端:文案大全實(shí)用標(biāo)準(zhǔn)文檔1、創(chuàng)建一個socket,用函數(shù)socket();2、設(shè)置對方的IP地址和端口等屬性;3、發(fā)送數(shù)據(jù),用函數(shù)sendto();4、關(guān)閉網(wǎng)絡(luò)連接;三.實(shí)驗內(nèi)容:編輯代碼:(1)服務(wù)器源程序:#include標(biāo)準(zhǔn)輸入輸出頭文件#include互聯(lián)網(wǎng)地址族#includeLI
4、NUX下C語言程序的INTERNET定義頭文件#include符號常量#include文件控制#include文件狀態(tài)#include基本系統(tǒng)數(shù)據(jù)類型#include套接字接口#defineLOCALPORT4567//定義本地服務(wù)器端口intmain(intargc,char*argv[]){ints,len;structsockaddr_inaddr;intaddr_len;char
5、msg[256];inti=0;//編寫一個函數(shù)用來初始化套接字和綁定套接字。//初始化套接字。socket參數(shù)第一個是網(wǎng)絡(luò)套接字族。一般都是AF_INET。//第二個參數(shù)是套接字類型。TCP的是SOCK_STREAM。//而UDP的是SOCK_DGRAM的形式。//第三個是初始化的協(xié)議。一般都是0。if((s=socket(AF_INET,SOCK_DGRAM,0))<0){perror("error");exit(1);}else{printf("socketcreated.");printf
6、("sockedid:%d",s);printf("remoteport:%d",LOCALPORT);//創(chuàng)建成功后輸出信息。文案大全實(shí)用標(biāo)準(zhǔn)文檔}len=sizeof(structsockaddr_in);bzero(&addr,sizeof(addr));addr.sin_family=AF_INET;//地址家族。addr.sin_port=htons(LOCALPORT);//端口。這個port是自己申明的變量,一般自己申明的端口號要大于1024。addr.sin_addr.s_ad
7、dr=htonl(INADDR_ANY);//地址是一個結(jié)構(gòu)體。用htonl把它轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序。if(bind(s,(structsockaddr*)&addr,sizeof(addr))<0){perror("connect...");exit(1);}else{printf("bindok.");printf("localport:%d",LOCALPORT);}//綁定套接字。while(1){bzero(msg,sizeof(msg));len=sizeof(structsockad
8、dr_in);//因為我們是用UDP的方式。所以我們這里用recvform來接收數(shù)據(jù)。若是TCP則采用recv。//recvform的參數(shù)。第一是套接字,第二個是你要接收的字符緩沖區(qū)。//第三個是緩沖區(qū)大小。第四個是標(biāo)記我們設(shè)為0就好。//第五個參數(shù)是接收對方地址。第六個是地址長度。if((i=recvfrom(s,msg,sizeof(msg),0,(structsockaddr*)&addr,&len))==-1){printf("errorrece