實驗十一-網絡編程(共12頁)_第1頁
實驗十一-網絡編程(共12頁)_第2頁
實驗十一-網絡編程(共12頁)_第3頁
實驗十一-網絡編程(共12頁)_第4頁
實驗十一-網絡編程(共12頁)_第5頁
已閱讀5頁,還剩7頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上嵌入式操作系統應用開發課程實驗報告班 級: * 學 號: * 姓 名:* 指導老師: * 成 績: 實驗十一 網絡編程一、目的與任務目的:了解掌握網絡編程的特點與功能,學會借助網絡系統的功能函數進行編程。任務:利用C語言指令編寫程序調用網絡系統函數,完成相應網絡訪問功能。二、內容、要求與安排方式1、實驗內容與要求:1)利用地址處理函數訪問網絡地址以及編程實現域名與IP信息解析 。2)實現UDP廣播與組播通信功能。3)練習原始套接口基本應用 。2、實驗安排方式:采用1人1組,上機在Linux系統下進行編程實驗。三、程序清單(1)TCP服務器和TCP客戶端通信1.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> #include <sys/socket.h> #include <arpa/inet.h> /inet_ntoa()函數的頭文件#define portnumber 3333 /定義端口號:(0-

3、1024為保留端口號,最好不要用)int main(int argc, char *argv) int sockfd,new_fd; struct sockaddr_in server_addr; /描述服務器地址 struct sockaddr_in client_addr; /描述客戶端地址 int sin_size; char hello="Hello! Are You Fine?n" /* 服務器端開始建立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); /* 服務器端填充 sockaddr結構 */ 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數據轉化為網絡上的long數據)和任何主機通信 /INADDR_ANY

5、 表示可以接收任意IP地址的數據,即綁定到所有的IP /server_addr.sin_addr.s_addr=inet_addr("192.168.1.1"); /用于綁定到一個固定IP,inet_addr用于把數字加格式的ip轉化為整形ip server_addr.sin_port=htons(portnumber); / (將本機器上的short數據轉化為網絡上的short數據)端口號 /* 捆綁sockfd描述符到IP地址 */ if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct so

6、ckaddr)=-1) fprintf(stderr,"Bind error:%sna",strerror(errno); exit(1); /* 設置允許連接的最大客戶端數 */ if(listen(sockfd,5)=-1) fprintf(stderr,"Listen error:%sna",strerror(errno); exit(1); while(1) /* 服務器阻塞,直到客戶程序建立連接 */ 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); / 將網絡地址轉換成.字符串,并打印到輸出終端 /向客戶端程序寫入hello數組里的字符 if(write(new_fd,hello,strlen(hello)=-1) fprintf

8、(stderr,"Write Error:%sn",strerror(errno); exit(1); /* 這個通訊已經結束 */ close(new_fd); /* 循環下一個 */ /* 結束通訊 */ 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()函數的頭文件#define portnumber 3333 /定義端口號:(0-1024為保留端口號,最好不要用)int main(int argc, char *argv) int sockfd; char buffer1024; struct sockaddr_in server_addr; /描述服務器的地址 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); /* 客戶程序填充服務端的資料 */ bzero(&server_addr,sizeof(server_addr); / 初始化,置0 server_addr.sin_family=AF_INET; / IPV4 server_addr.sin_port=htons(portnumber); / (將本機器上的short數據轉化為網絡上的short數據)端口號 server_addr.sin_addr=*(struct in_addr *)host-&

12、gt;h_addr); / IP地址 /* 客戶程序發起連接請求 */ 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); /* 結束通訊 */ close(sockfd); exit(0); (2) UDP服務器和UDP客戶端通信2.1UDP服務器代碼;#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) /* 從網絡上讀,并寫

15、到網絡上 */ bzero(msg,sizeof(msg); / 初始化,清零 addrlen = sizeof(struct sockaddr); n=recvfrom(sockfd,msg,MAX_MSG_SIZE,0,(struct sockaddr*)&addr,&addrlen); / 從客戶端接收消息 msgn=0; /* 顯示服務端已經收到了信息 */ fprintf(stdout,"Server have received %s",msg); / 顯示消息 int main(void) int sockfd; /socket描述符 struc

16、t sockaddr_in addr; /定義服務器起地址 /* 服務器端開始建立socket描述符 */ sockfd=socket(AF_INET,SOCK_DGRAM,0); if(sockfd<0) fprintf(stderr,"Socket Error:%sn",strerror(errno); exit(1); /* 服務器端填充 sockaddr結構 */ bzero(&addr,sizeof(struct sockaddr_in); / 初始化,置0 addr.sin_family=AF_INET; / Internet addr.sin_a

17、ddr.s_addr=htonl(INADDR_ANY); / (將本機器上的long數據轉化為網絡上的long數據)和任何主機通信 /INADDR_ANY 表示可以接收任意IP地址的數據,即綁定到所有的IP /addr.sin_addr.s_addr=inet_addr("192.168.1.1"); /用于綁定到一個固定IP,inet_addr用于把數字加格式的ip轉化為整形ip addr.sin_port=htons(SERVER_PORT); / (將本機器上的short數據轉化為網絡上的short數據)端口號 /* 捆綁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) /* 從鍵盤讀入,寫到服務端 */ 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; /定義服務器起地址 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); /* 填充服務端的資料 */ bzero(&addr,sizeof(struct sockaddr_in); / 初始化,置0

22、addr.sin_family=AF_INET; / Internet addr.sin_port=htons(SERVER_PORT);/ (將本機器上的short數據轉化為網絡上的short數據)端口號 if(inet_aton(argv1,&addr.sin_addr)<0) /*inet_aton函數用于把字符串型的IP地址轉化成網絡2進制數字*/ fprintf(stderr,"Ip error:%sn",strerror(errno); exit(1); udpc_requ(sockfd,&addr,sizeof(struct sockad

23、dr_in); / 進行讀寫操作 close(sockfd); 四、實驗過程(1) 運行tcp服務器段程序和客戶端程序,顯示過程(2)運行udp服務器段程序和客戶端程序,顯示過程截圖五、實驗體會TCP的服務器程序結構:     1.創建一個socket,用函數socket()     2.綁定IP地址、端口信息到socket上,用函數bind()     3.設置允許的最大連接數,用函數listen()     4.接受客戶端的連接,用函數accept()     5.收發數據,用send()、recv(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論