实验十一-网络编程(共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

提交评论