




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上嵌入式操作系統(tǒng)應(yīng)用開發(fā)課程實驗報告班 級: * 學(xué) 號: * 姓 名:* 指導(dǎo)老師: * 成 績: 實驗十一 網(wǎng)絡(luò)編程一、目的與任務(wù)目的:了解掌握網(wǎng)絡(luò)編程的特點與功能,學(xué)會借助網(wǎng)絡(luò)系統(tǒng)的功能函數(shù)進行編程。任務(wù):利用C語言指令編寫程序調(diào)用網(wǎng)絡(luò)系統(tǒng)函數(shù),完成相應(yīng)網(wǎng)絡(luò)訪問功能。二、內(nèi)容、要求與安排方式1、實驗內(nèi)容與要求:1)利用地址處理函數(shù)訪問網(wǎng)絡(luò)地址以及編程實現(xiàn)域名與IP信息解析 。2)實現(xiàn)UDP廣播與組播通信功能。3)練習(xí)原始套接口基本應(yīng)用 。2、實驗安排方式:采用1人1組,上機在Linux系統(tǒng)下進行編程實驗。三、程序清單(1)TCP服務(wù)器和TCP客戶端通信1.1服務(wù)器
2、代碼;#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h> #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> /inet_ntoa()函數(shù)的頭文件#define portnumber 3333 /定義端口號:(0-
3、1024為保留端口號,最好不要用)int main(int argc, char *argv) int sockfd,new_fd; struct sockaddr_in server_addr; /描述服務(wù)器地址 struct sockaddr_in client_addr; /描述客戶端地址 int sin_size; char hello="Hello! Are You Fine?n" /* 服務(wù)器端開始建立sockfd描述符 */ if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) / AF_INET:IPV4;SOCK_STRE
4、AM:TCP fprintf(stderr,"Socket error:%sna",strerror(errno); exit(1); /* 服務(wù)器端填充 sockaddr結(jié)構(gòu) */ bzero(&server_addr,sizeof(struct sockaddr_in); / 初始化,置0 server_addr.sin_family=AF_INET; / Internet server_addr.sin_addr.s_addr=htonl(INADDR_ANY); / (將本機器上的long數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的long數(shù)據(jù))和任何主機通信 /INADDR_ANY
5、 表示可以接收任意IP地址的數(shù)據(jù),即綁定到所有的IP /server_addr.sin_addr.s_addr=inet_addr("192.168.1.1"); /用于綁定到一個固定IP,inet_addr用于把數(shù)字加格式的ip轉(zhuǎn)化為整形ip server_addr.sin_port=htons(portnumber); / (將本機器上的short數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的short數(shù)據(jù))端口號 /* 捆綁sockfd描述符到IP地址 */ if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct so
6、ckaddr)=-1) fprintf(stderr,"Bind error:%sna",strerror(errno); exit(1); /* 設(shè)置允許連接的最大客戶端數(shù) */ if(listen(sockfd,5)=-1) fprintf(stderr,"Listen error:%sna",strerror(errno); exit(1); while(1) /* 服務(wù)器阻塞,直到客戶程序建立連接 */ sin_size=sizeof(struct sockaddr_in); if(new_fd=accept(sockfd,(struct soc
7、kaddr *)(&client_addr),&sin_size)=-1) fprintf(stderr,"Accept error:%sna",strerror(errno); exit(1); fprintf(stderr,"Server get connection from %sn",inet_ntoa(client_addr.sin_addr); / 將網(wǎng)絡(luò)地址轉(zhuǎn)換成.字符串,并打印到輸出終端 /向客戶端程序?qū)懭雋ello數(shù)組里的字符 if(write(new_fd,hello,strlen(hello)=-1) fprintf
8、(stderr,"Write Error:%sn",strerror(errno); exit(1); /* 這個通訊已經(jīng)結(jié)束 */ close(new_fd); /* 循環(huán)下一個 */ /* 結(jié)束通訊 */ close(sockfd); exit(0); 1.2客戶端代碼;#include <stdlib.h> #include <stdio.h> #include <errno.h> #include <string.h> #include <netdb.h> #include <sys/types.h&
9、gt; #include <netinet/in.h> #include <sys/socket.h> #include <arpa/inet.h> /inet_ntoa()函數(shù)的頭文件#define portnumber 3333 /定義端口號:(0-1024為保留端口號,最好不要用)int main(int argc, char *argv) int sockfd; char buffer1024; struct sockaddr_in server_addr; /描述服務(wù)器的地址 struct hostent *host; int nbytes; /*
10、 使用hostname查詢host 名字 */ if(argc!=2) fprintf(stderr,"Usage:%s hostname an",argv0); exit(1); if(host=gethostbyname(argv1)=NULL) fprintf(stderr,"Gethostname errorn"); exit(1); /* 客戶程序開始建立 sockfd描述符 */ if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) / AF_INET:Internet;SOCK_STREAM:TCP fpr
11、intf(stderr,"Socket Error:%san",strerror(errno); exit(1); /* 客戶程序填充服務(wù)端的資料 */ bzero(&server_addr,sizeof(server_addr); / 初始化,置0 server_addr.sin_family=AF_INET; / IPV4 server_addr.sin_port=htons(portnumber); / (將本機器上的short數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的short數(shù)據(jù))端口號 server_addr.sin_addr=*(struct in_addr *)host-&
12、gt;h_addr); / IP地址 /* 客戶程序發(fā)起連接請求 */ if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-1) fprintf(stderr,"Connect Error:%san",strerror(errno); exit(1); /* 連接成功了 */ if(nbytes=read(sockfd,buffer,1024)=-1) fprintf(stderr,"Read Error:%sn",strerror(errno)
13、; exit(1); buffernbytes='0' printf("I have received:%sn",buffer); /* 結(jié)束通訊 */ close(sockfd); exit(0); (2) UDP服務(wù)器和UDP客戶端通信2.1UDP服務(wù)器代碼;#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>#in
14、clude <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>#define SERVER_PORT 8888 /定義端口號:(0-1024為保留端口號,最好不要用)#define MAX_MSG_SIZE 1024 void udps_respon(int sockfd) struct sockaddr_in addr; int addrlen,n; char msgMAX_MSG_SIZE; while(1) /* 從網(wǎng)絡(luò)上讀,并寫
15、到網(wǎng)絡(luò)上 */ bzero(msg,sizeof(msg); / 初始化,清零 addrlen = sizeof(struct sockaddr); n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&addr,&addrlen); / 從客戶端接收消息 msgn=0; /* 顯示服務(wù)端已經(jīng)收到了信息 */ fprintf(stdout,"Server have received %s",msg); / 顯示消息 int main(void) int sockfd; /socket描述符 struc
16、t sockaddr_in addr; /定義服務(wù)器起地址 /* 服務(wù)器端開始建立socket描述符 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) fprintf(stderr,"Socket Error:%sn",strerror(errno); exit(1); /* 服務(wù)器端填充 sockaddr結(jié)構(gòu) */ bzero(&addr,sizeof(struct sockaddr_in); / 初始化,置0 addr.sin_family=AF_INET; / Internet addr.sin_a
17、ddr.s_addr=htonl(INADDR_ANY); / (將本機器上的long數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的long數(shù)據(jù))和任何主機通信 /INADDR_ANY 表示可以接收任意IP地址的數(shù)據(jù),即綁定到所有的IP /addr.sin_addr.s_addr=inet_addr("192.168.1.1"); /用于綁定到一個固定IP,inet_addr用于把數(shù)字加格式的ip轉(zhuǎn)化為整形ip addr.sin_port=htons(SERVER_PORT); / (將本機器上的short數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的short數(shù)據(jù))端口號 /* 捆綁sockfd描述符 */ if(bind(s
18、ockfd,(struct sockaddr *)&addr,sizeof(struct sockaddr_in)<0) fprintf(stderr,"Bind Error:%sn",strerror(errno); exit(1); udps_respon(sockfd); / 進行讀寫操作 close(sockfd); 2.2UDP客戶端代碼#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include &
19、lt;unistd.h>#include <netdb.h>#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>#define SERVER_PORT 8888 /定義端口號:(0-1024為保留端口號,最好不要用)#define MAX_BUF_SIZE 1024 void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len) cha
20、r bufferMAX_BUF_SIZE; int n; while(1) /* 從鍵盤讀入,寫到服務(wù)端 */ printf("Please input char:n"); fgets(buffer,MAX_BUF_SIZE,stdin); sendto(sockfd,buffer,strlen(buffer),0,(struct sockaddr*)addr,len); bzero(buffer,MAX_BUF_SIZE); int main(int argc,char *argv) int sockfd; /socket描述符 struct sockaddr_in ad
21、dr; /定義服務(wù)器起地址 if(argc!=2) fprintf(stderr,"Usage:%s server_ipn",argv0); exit(1); /* 建立 sockfd描述符 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) fprintf(stderr,"Socket Error:%sn",strerror(errno); exit(1); /* 填充服務(wù)端的資料 */ bzero(&addr,sizeof(struct sockaddr_in); / 初始化,置0
22、addr.sin_family=AF_INET; / Internet addr.sin_port=htons(SERVER_PORT);/ (將本機器上的short數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的short數(shù)據(jù))端口號 if(inet_aton(argv1,&addr.sin_addr)<0) /*inet_aton函數(shù)用于把字符串型的IP地址轉(zhuǎn)化成網(wǎng)絡(luò)2進制數(shù)字*/ fprintf(stderr,"Ip error:%sn",strerror(errno); exit(1); udpc_requ(sockfd,&addr,sizeof(struct sockad
23、dr_in); / 進行讀寫操作 close(sockfd); 四、實驗過程(1) 運行tcp服務(wù)器段程序和客戶端程序,顯示過程(2)運行udp服務(wù)器段程序和客戶端程序,顯示過程截圖五、實驗體會TCP的服務(wù)器程序結(jié)構(gòu): 1.創(chuàng)建一個socket,用函數(shù)socket() 2.綁定IP地址、端口信息到socket上,用函數(shù)bind() 3.設(shè)置允許的最大連接數(shù),用函數(shù)listen() 4.接受客戶端的連接,用函數(shù)accept() 5.收發(fā)數(shù)據(jù),用send()、recv(
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 成本管理模型訓(xùn)練營
- 糖尿病出院后護理
- 中班健康教育活動:交警叔叔進課堂
- 腫瘤患者陽光心態(tài)建設(shè)路徑
- 施工升降司機培訓(xùn)
- 培養(yǎng)小孩勞動教育
- 腎靜脈疾病超聲診斷
- 網(wǎng)課教師培訓(xùn)
- 兒童護理培訓(xùn)
- 供應(yīng)室護士崗前培訓(xùn)課件
- 兒童膿毒血癥護理
- 頂板事故應(yīng)急演練
- 智研咨詢發(fā)布:中國企業(yè)數(shù)字化解決方案行業(yè)市場發(fā)展環(huán)境及前景研究報告
- 《大學(xué)計算機基礎(chǔ)案例教程(微課版)第2版》全套教學(xué)課件
- 雙輪銑攪拌樁施工方案
- 食堂食材配送采購 投標(biāo)方案(技術(shù)方案)
- 貴州遵義四中2022自主招生物理試卷試題真題(含答案)
- NBT 35095-2017 水電工程小流域水文計算規(guī)范
- 2024年廣東省中考生物試卷(含答案)
- 江蘇省宿遷市泗洪縣2023-2024學(xué)年六年級下學(xué)期期末綜合(道德與法治+科學(xué))試卷
- 急性左心衰護理查房課件
評論
0/150
提交評論