實(shí)驗(yàn)十一網(wǎng)絡(luò)編程_第1頁(yè)
實(shí)驗(yàn)十一網(wǎng)絡(luò)編程_第2頁(yè)
實(shí)驗(yàn)十一網(wǎng)絡(luò)編程_第3頁(yè)
實(shí)驗(yàn)十一網(wǎng)絡(luò)編程_第4頁(yè)
實(shí)驗(yàn)十一網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩19頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《嵌入式操作系統(tǒng)應(yīng)用開(kāi)發(fā)》課程實(shí)驗(yàn)報(bào)告班級(jí):****************學(xué)號(hào):*************姓名:**************指導(dǎo)老師:***************成績(jī):

實(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ù)器代碼;#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>intmain(){intsockfd,client_fd; //sock_fd-監(jiān)聽(tīng)套接字描述符;client_fd-連接套接字描述符structsockaddr_inmy_addr; //本機(jī)地址structsockaddr_inremote_addr; //客戶端地址 //創(chuàng)建套接字if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}//設(shè)置地址端口可重用intval=1;setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(char*)&val,sizeof(val)); //設(shè)置本地地址信息my_addr.sin_family=AF_INET; //協(xié)議族my_addr.sin_port=htons(3333); //端口my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");//IP地址bzero(&(my_addr.sin_zero),8); //填充0 //綁定地址到套接字描述符上if(bind(sockfd,(structsockaddr*)&my_addr,sizeof(structsockaddr))==-1){perror("bind");exit(1);}//在地址端口上監(jiān)聽(tīng)if(listen(sockfd,10)==-1){ perror("listen");exit(1);}//等待客戶端連接,如果有客戶端連接,則產(chǎn)生新的連接套接字 intsin_size=sizeof(structsockaddr_in); if((client_fd=accept(sockfd,(structsockaddr*)&remote_addr,&sin_size))==-1) { perror("accept"); exit(1); } //輸出客戶端IP地址 printf("receivedaconnectionfrom%s\n",inet_ntoa(remote_addr.sin_addr)); //向客戶端發(fā)送歡迎信息 if(send(client_fd,"Hello,youareconnected!\n",26,0)==-1) { perror("send"); close(client_fd); exit(2); } //關(guān)閉連接套接字 close(client_fd); //關(guān)閉監(jiān)聽(tīng)套接字 close(sockfd); return0;}1.2客戶端代碼;#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>intmain(intargc,char*argv[]){intsockfd,recvbytes;charbuf[100];structhostent*host;structsockaddr_inserv_addr; //創(chuàng)建套接字if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){perror("socket");exit(1);}//設(shè)置服務(wù)器地址結(jié)構(gòu)體serv_addr.sin_family=AF_INET;serv_addr.sin_port=htons(3333);serv_addr.sin_addr.s_addr=inet_addr("127.0.0.1");bzero(&(serv_addr.sin_zero),8);//向服務(wù)器發(fā)起連接if(connect(sockfd,(structsockaddr*)&serv_addr,sizeof(structsockaddr))==-1){perror("connect");exit(1);}//接收服務(wù)器端信息并顯示if((recvbytes=recv(sockfd,buf,100,0))==-1){perror("recv");exit(1);}buf[recvbytes]='\0'; //設(shè)置字符串結(jié)尾printf("Received:%s",buf);//關(guān)閉套接字close(sockfd);return0;}(2)UDP服務(wù)器和UDP客戶端通信2.1UDP服務(wù)器代碼;#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<arpa/inet.h>#include<sys/socket.h>intmain(){intsockfd;//套接字描述符 structsockaddr_inserver; structsockaddr_inclient; intsin_size; intnum; charmsg[100]; charsbuf[100]="Welcometomyserver."; if((sockfd=socket(AF_INET,SOCK_DGRAM,0))==-1) { perror("socket"); exit(1); } bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(3333); server.sin_addr.s_addr=inet_addr("192.168.245.128"); if(bind(sockfd,(structsockaddr*)&server,sizeof(structsockaddr))==-1) { perror("bind"); exit(1); } sin_size=sizeof(structsockaddr_in); while(1) {num=recvfrom(sockfd,msg,100,0,(structsockaddr*)&client,&sin_size); if(num<0){ perror("recvfrom"); exit(1); } msg[num]='\0'; printf("Yougotamessage(%s)from%s\n",msg,inet_ntoa(client.sin_addr)); strcpy(sbuf,msg); sendto(sockfd,sbuf,strlen(sbuf),0,(structsockaddr*)&client,sin_size); if(!strcmp(msg,"quit"))break; } close(sockfd);//closelistenfd return0;}2.2UDP客戶端代碼#include<stdlib.h>#include<stdio.h>#include<string.h>#include<unistd.h>#include<sys/socket.h>#include<netinet/in.h>#include<netdb.h>intmain(intargc,char*argv[]){ intfd,numbytes; charbuf[100]; charsendbuf[20]="hello"; structhostent*he; structsockaddr_inserver,reply; if(argc!=2){ printf("Usage:%s<IPAddress>\n",argv[0]); exit(1); } if((he=gethostbyname(argv[1]))==NULL) { printf("gethostbyname()error\n"); exit(1); } if((fd=socket(AF_INET,SOCK_DGRAM,0))==-1) { printf("socket"); exit(1); } bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(3333); server.sin_addr=*((structin_addr*)he->h_addr);sendto(fd,sendbuf,strlen(sendbuf),0,(structsockaddr*)&server,sizeof(structsockaddr)); while(1) { intlen; len=sizeof(structsockaddr_in);if((numbytes=recvfrom(fd,buf,100,0,(structsockaddr*)&reply,&len))==-1) { perror("recvfrom"); exit(1); } //checkifserverisrightif(len!=sizeof(structsockaddr)||memcmp((constvoid*)&server,(constvoid*)&reply,len)!=0) { printf("Receivemessagefromotherserver.\n"); continue; } //printfmessagefromserver buf[numbytes]='\0'; printf("ServerMessage:%s\n",buf); printf("input:"); fgets(sendbuf,sizeof(sendbuf),stdin); sendbuf[strlen(sendbuf)-1]='\0';sendto(fd,sendbuf,strlen(sendbuf),0,(structsockaddr*)&server,sizeof(structsockaddr)); if(strcmp(sendbuf,"quit")==0) break; } close(fd); return0;}3.原始套接口基本應(yīng)用套接口服務(wù)器代碼#include<stdio.h>#include<strings.h>#include<unistd.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<arpa/inet.h>#definePORT1234#defineBACKLOG5#defineMAXDATASIZE1000voidprocess_cli(intconnfd,structsockaddr_inclient);main(){ intlistenfd,connfd; pid_tpid; structsockaddr_inserver; structsockaddr_inclient; intlen; if((listenfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } intopt=SO_REUSEADDR; setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt)); bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(listenfd,(structsockaddr*)&server,sizeof(server))==-1) { perror("bind"); exit(1); } if(listen(listenfd,BACKLOG)==-1) { perror("listen"); exit(1); } len=sizeof(client); while(1) { if((connfd=accept(listenfd,(structsockaddr*)&client,&len))==-1) { perror("accept"); exit(1); } if((pid=fork())>0) { close(connfd); continue; } elseif(pid==0) { close(listenfd); process_cli(connfd,client); exit(0); } else { perror("fork"); exit(0); } } close(listenfd);}voidexchange(char*src,intnum){ charc; inti; src[num-1]=0; num=num-1; printf("%d\n",num); for(i=0;i<num;i++) { c=src[i]; src[i]=src[num-1]; src[num-1]=c; num=num-1; if(num<=i) break; }}voidprocess_cli(intconnfd,structsockaddr_inclient){ intnum; charexitflag=0; charrecvbuf[MAXDATASIZE],sendbuf[MAXDATASIZE],cli_name[MAXDATASIZE]; printf("gotaconnectionfrom%s.\n",inet_ntoa(client.sin_addr)); num=recv(connfd,cli_name,MAXDATASIZE,0); if(num==-1) { close(connfd); perror("recv"); return; } cli_name[num-1]='\0'; printf("%sclient'snameis%s.\n",inet_ntoa(client.sin_addr),cli_name); while(num=recv(connfd,recvbuf,MAXDATASIZE,0)) { recvbuf[num]='\0'; printf("%s:%s",cli_name,recvbuf); if(strcmp(recvbuf,"bye")==0) exitflag=1; exchange(recvbuf,num); send(connfd,recvbuf,num,0); if(exitflag==1) break; } close(connfd); printf("client%sfrom%send.\n",cli_name,inet_ntoa(client.sin_addr));}套接口客戶端代碼#include<stdio.h>#include<unistd.h>#include<strings.h>#include<sys/types.h>#include<sys/socket.h>#include<netinet/in.h>#include<netdb.h>#include<time.h>#include<fcntl.h>#definePORT1234#defineMAXDATASIZE100voidprocess(FILE*fp,intsockfd);char*getMessage(char*sendline,intlen,FILE*fp);intmain(intargc,char*argv[]){ intsockfd; structhostent*he; structsockaddr_inserver; if(argc!=2) { printf("Usage:%s<IPAddress>\n",argv[0]); exit(1); } if((he=gethostbyname(argv[1]))==NULL) { printf("gethostbyname()error\n"); exit(1); } if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1) { perror("socket"); exit(1); } bzero(&server,sizeof(server)); server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr=*((structin_addr*)he->h_addr); if(connect(sockfd,(structsockaddr*)&server,sizeof(server))==-1) { perror("connect"); exit(1); } process(stdin,sockfd); close(sockfd);}voidwritefile(intfd,char*str){ time_tt1; structtm*t2; charwtext[100]; t1=time(NULL); t2=localtime(&t1); sprintf(wtext,"%d-%d-%d-%d:%d:%d",t2->tm_year+1900,t2->tm_mon+1,t2->tm_mday,t2->tm_hour,t2->tm_min,t2->tm_sec); sprintf(wtext,"%s %s\n",wtext,str); write(fd,wtext,strlen(wtext));} voidprocess(FILE*fp,intsockfd){ char sendline[MAXDATASIZE],recvline[MAXDATASIZE]; intnum; intfd; time_tt1; structtm*t2; charcname[30]; chartmp[100]; printf("Connectedtoserver.\n"); printf("Inputclient'sname:"); if(fgets(cname,30,fp)==NULL) { printf("\nExit.\n"); return; } send(sockfd,cname,strlen(cname),0); cname[strlen(cname)-1]=0; fd=open(cname,O_WRONLY|O_CREAT|O_APPEND,0644); if(fd==-1) { perror("open"); } writefile(fd,"connectionsuccess"); while(getMessage(sendline,MAXDATASIZE,fp)!=NULL) { send(sockfd,sendline,strlen(sendline),0); sendline[strlen(sendline)-1]=0; sprintf(tmp,"%s : %s",cname,sendline); writefile(fd,tmp); if((num=recv(sockfd,recvline,MAXDATASIZE,0))==0) { printf("Serverterminated.\n"); return; } recvline[num]='\0'; printf("ServerMessage:%s\n",recvline);

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論