




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、班 級(jí): 學(xué) 號(hào): 姓 名: 指導(dǎo)老師: 成 績(jī):嵌入式操作系統(tǒng)應(yīng)用開(kāi)發(fā)課程實(shí)驗(yàn)報(bào)告*實(shí)驗(yàn)十一 網(wǎng)絡(luò)編程一、目的與任務(wù) 目的:了解掌握網(wǎng)絡(luò)編程的特點(diǎn)與功能, 學(xué)會(huì)借助網(wǎng)絡(luò)系統(tǒng)的功能函數(shù)進(jìn)行 編程。任務(wù):利用 C 語(yǔ)言指令編寫(xiě)程序調(diào)用網(wǎng)絡(luò)系統(tǒng)函數(shù),完成相應(yīng)網(wǎng)絡(luò)訪問(wèn)功 能。二、內(nèi)容、要求與安排方式1、實(shí)驗(yàn)內(nèi)容與要求:1)利用地址處理函數(shù)訪問(wèn)網(wǎng)絡(luò)地址以及編程實(shí)現(xiàn)域名與IP 信息解析 。2)實(shí)現(xiàn) UDP 廣播與組播通信功能。3)練習(xí)原始套接口基本應(yīng)用。2、實(shí)驗(yàn)安排方式:采用 1人1組,上機(jī)在 Linux 系統(tǒng)下進(jìn)行編程實(shí)驗(yàn)。三、程序清單(1)TCP 服務(wù)器和 TCP 客戶端通信1.1服務(wù)器代碼 ;#i
2、nclude <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>#i nclude <arpa/i net.h> /in et_ntoa(函數(shù)的頭文件#define portnumber 3333 /定義端口號(hào):( 0-1024 為保留端口
3、號(hào),最好不要用) 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ù)器端開(kāi)始建立 sockfd 描述符 */if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) / AF_INET:IPV4;SOCK_STREAM:TCPfprin
4、tf(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); / ( 將本機(jī)器上的 long 數(shù) 據(jù)轉(zhuǎn)化為網(wǎng)絡(luò)上的 long 數(shù)據(jù) )和任何主機(jī)通信 /INADDR_ANY 表示可以接收任
5、意 IP 地址的數(shù)據(jù),即綁定到所有的 IP/server_addr.sin_addr.s_addr=inet_addr("192.168.1.1"); 用/ 于綁定到一個(gè)固定IP,inet_addr用于把數(shù)字加格式的ip轉(zhuǎn)化為整形ipserver_addr.sin_port=htons(portnumber); / 將本機(jī)器上的 short數(shù)據(jù)轉(zhuǎn)化為網(wǎng) 絡(luò)上的short數(shù)據(jù))端口號(hào)/*捆綁sockfd描述符到IP地址*/if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr)=-
6、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 sockaddr *)(&cli
7、ent_addr),&sin_size)=-1) fprintf(stderr,"Accept error:%sna",strerror(errno);exit(1); fprintf(stderr,"Server get connectionfrom %sn",inet_ntoa(client_addr.sin_addr); / 將網(wǎng)絡(luò)地址轉(zhuǎn)換成 .字符串,并打印 到輸出終端/向客戶端程序?qū)懭?hello 數(shù)組里的字符if(write(new_fd,hello,strlen(hello)=-1)fprintf(stderr,"Writ
8、e Error:%sn",strerror(errno);exit(1);/* 這個(gè)通訊已經(jīng)結(jié)束 */close(new_fd);/* 循環(huán)下一個(gè) */* 結(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>#include <netinet/in.h&
9、gt;#include <sys/socket.h>#i nclude <arpa/i net.h> /in et_ntoa(函數(shù)的頭文件#define portnumber 3333 /定義端口號(hào):( 0-1024 為保留端口號(hào),最好不要用)int main(int argc, char *argv)int sockfd;char buffer1024;struct sockaddr_in server_addr; /描/ 述服務(wù)器的地址struct hostent *host;int nbytes;/*使用host name查詢host名字*/if(argc!=2)
10、fprintf(stderr,"Usage:%s hostname an",argv0);exit(1);if(host=gethostbyname(argv1)=NULL)fprintf(stderr,"Gethostname errorn"); exit(1);/* 客戶程序開(kāi)始建立 sockfd 描述符 */ if(sockfd=socket(AF_INET,SOCK_STREAM,0)=-1) /AF_INET:Internet;SOCK_STREAM:TCPfprintf(stderr,"Socket Error:%san"
11、,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); / 將( 本機(jī)器上的 short 數(shù)據(jù)轉(zhuǎn)化為網(wǎng) 絡(luò)上的 short 數(shù)據(jù) )端口號(hào)server_addr.s in _addr=*(struct in _addr *)host->h_addr); /IP 地址/* 客戶程序發(fā)起連接請(qǐng)求
12、*/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); exit(1); buffernbytes='0'pri
13、ntf("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>#include <sys/socket.h>#include <
14、;netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>#define SERVER_PORT 8888 /定義端口號(hào):( 0-1024 為保留端口號(hào),最好不要 用)#define MAX_MSG_SIZE 1024void udps_respon(int sockfd)struct sockaddr_in addr;int addrlen,n;char msgMAX_MSG_SIZE;while(1) /* 從網(wǎng)絡(luò)上讀 , 并寫(xiě)到網(wǎng)絡(luò)上 */ bzero(msg,sizeof(msg); / 初始化 ,
15、清零 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 描述符struct sockaddr_in addr; /定/ 義服務(wù)器起地址/* 服務(wù)器端開(kāi)始建立
16、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_addr.s_addr=htonl(INADDR_ANY); / ( 將本機(jī)器上的 long 數(shù)據(jù)
17、轉(zhuǎn)化 為網(wǎng)絡(luò)上的 long 數(shù)據(jù))和任何主機(jī)通信 /INADDR_ANY 表示可以接收任意 IP 地址的數(shù)據(jù),即綁定到所有的 IP/addr.sin_addr.s_addr=inet_addr("192.168.1.1"); /用/ 于綁定到一個(gè)固定IP,inet_addr用于把數(shù)字加格式的ip轉(zhuǎn)化為整形ipaddr.sin_port=htons(SERVER_PORT); / 將本機(jī)器上的 short數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò) 上的 short 數(shù)據(jù) )端口號(hào)/* 捆綁 sockfd 描述符 */if(bind(sockfd,(struct sockaddr *)&addr,
18、sizeof(struct sockaddr_in)<0)fprintf(stderr,"Bind Error:%sn",strerror(errno);exit(1);udps_respon(sockfd); / 進(jìn)行讀寫(xiě)操作close(sockfd);2.2UDP 客戶端代碼#include <stdlib.h>#include <stdio.h>#include <errno.h>#include <string.h>#include <unistd.h>#include <netdb.h>
19、#include <sys/socket.h>#include <netinet/in.h>#include <sys/types.h>#include <arpa/inet.h>#define SERVER_PORT 8888 /定義端口號(hào):( 0-1024 為保留端口號(hào),最好不要 用)#define MAX_BUF_SIZE 1024void udpc_requ(int sockfd,const struct sockaddr_in *addr,int len)char bufferMAX_BUF_SIZE;int n;while(1) /*
20、 從鍵盤(pán)讀入 , 寫(xiě)到服務(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 addr; /定/ 義服務(wù)器起地址 if(argc!=2)fprintf(stderr,&
21、quot;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 addr.sin_family=AF_INET; / Internetaddr.sin_
22、port=htons(SERVER_PORT);/ (將本機(jī)器上的 short 數(shù)據(jù)轉(zhuǎn)化為網(wǎng)絡(luò) 上的 short 數(shù)據(jù) )端口號(hào)if(inet_aton(argv1,&addr.sin_addr)<0) /*inet_aton 函數(shù)用于把字符串型的 IP 地址轉(zhuǎn)化成網(wǎng)絡(luò) 2 進(jìn)制數(shù)字 */fprintf(stderr,"Ip error:%sn",strerror(errno); exit(1);udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in); / 進(jìn)行讀寫(xiě)操作 close(sockfd);四、實(shí)驗(yàn)過(guò)
23、程(1)運(yùn)行tcp服務(wù)器段程序和客戶端程序,顯示過(guò)程cxlCchenxiaolei '$ co ylcxiechenxiaoLei yl1 cedit tcp_server.ccxUclienxldolel yl J cxlfi chenxiaolel yl1 cxKchenxiaolei yl 1 cxUchenxiaolel ylllGtdlt lcp_Llierit.cgec tcp_server.c -o tcp_server ccc tcp_client.c -o tcp_client r/tcp_server &(11 12201cxlchenxiaolei ylJ
24、 ./tcp_client Uage:./tcp client hostnameL<Xie thenxiaol&i yljJ(2)運(yùn)行udp服務(wù)器段程序和客戶端程序,顯示過(guò)程截圖cxUchenxiaolei cd ylcxlchenKiaalei yli qedit udp_serer.c cxlchenxiaolei ylt qedit udp_client.ccxlfichenxiaoLei yl$ gcc udp_server.c -o udpserver gcc: udp server, c ;沒(méi)有那個(gè)文祚或目錄qcc:設(shè)有喻入文件cxl&chenKiaolei yl$ cxlfichenniaolei vljl cxlchenxiBolei yl$qcc udp_serer+c -o udp.serer gcc udp.client-c -o udp.client ./udp_&erer &1 12457cxie:hsnKiaolei ylj$ Judp.client 192.16E. 1'0£.253Please input char: asdflkPlease
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025辦公室用房租賃合同書(shū)范本
- 2025年大學(xué)輔導(dǎo)員招聘考試時(shí)事政治專(zhuān)項(xiàng)題庫(kù)
- 2024年度廣東惠州市產(chǎn)業(yè)投資集團(tuán)有限公司本部及所屬企業(yè)招聘30人筆試參考題庫(kù)附帶答案詳解
- 2025年小學(xué)語(yǔ)文畢業(yè)升學(xué)考試模擬試卷-古詩(shī)詞鑒賞題型剖析
- 2025年初中學(xué)業(yè)水平考試地理模擬卷:地理信息技術(shù)實(shí)踐應(yīng)用試題及答案
- 2025年征信考試題庫(kù):征信產(chǎn)品用戶體驗(yàn)與滿意度評(píng)價(jià)試題
- 2025年征信考試題庫(kù):征信國(guó)際合作與交流案例研討試題集錦
- 2025年中學(xué)教師資格《綜合素質(zhì)》教育熱點(diǎn)案例分析題庫(kù)(含答案解析)
- 南京航空航天大學(xué)金城學(xué)院《病原生物學(xué)與醫(yī)學(xué)免疫學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 華中師范大學(xué)《高級(jí)運(yùn)籌學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 2025年山東省東營(yíng)市廣饒縣一中中考一模英語(yǔ)試題(原卷版+解析版)
- 浙江省寧波市鎮(zhèn)海中學(xué)2024-2025學(xué)年高考二模英語(yǔ)試題試卷含解析
- 高校班干部培訓(xùn)
- 房 產(chǎn) 稅教學(xué)課件
- 2025年晉中職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫(kù)參考答案
- 【語(yǔ)言文字運(yùn)用】考點(diǎn)45 邏輯推斷(新增考點(diǎn))(解析版)
- 2025年江蘇蘇北四市高三一模高考地理試卷試題(含答案詳解)
- 《石油化工金屬管道工程施工質(zhì)量驗(yàn)收規(guī)范2023版》
- 《中級(jí)宏觀經(jīng)濟(jì)學(xué)》教學(xué)大綱
- 浙江錢(qián)江生物化學(xué)股份有限公司招聘筆試沖刺題2025
- 智能制造能力成熟度模型(-CMMM-)介紹及評(píng)估方法分享
評(píng)論
0/150
提交評(píng)論