UDP服务器及客户端程序设计_第1页
UDP服务器及客户端程序设计_第2页
UDP服务器及客户端程序设计_第3页
UDP服务器及客户端程序设计_第4页
UDP服务器及客户端程序设计_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、UDP服务器及客户端程序设计实验二UDP服务器及客户端程序设计一、实验目的1、学习和掌握Linux下的UDP服务器基本原理和基本编程方法。2、学习和掌握Linux下的UDP客户端基本原理和基本编程方法。二、实验平台ubu ntu-8.04 操作系统三、实验内容1、编写Linux下UDP服务器套接字程序,服务器接收客户端发送的信息并显示,同时显示客户的IP地址、端口号,并向客户端发送信息。如果服务器接 收的客户信息为“ bye”,则退出循环,并关闭套接字。2、编写Linux下UDP客户端套接字程序,结合实验三的UDP服务器端程序, 实现以下功能:(1)客户根据用户提供的IP地址将用户从终端输入的

2、信息发送给服务器,然 后等待服务器的回应。(2) 服务器接收客户端发送的信息并显示,同时显示客户的IP地址、端口号, 并向客户端发送信息。如果服务器接收的客户信息为“bye”,则退出循环, 并关闭套接字。(3)客户接收、显示服务器发回的信息,并关闭套接字。四、实验原理1、使用UDP套接字编程可以实现基于 TCP/IP协议的面向无连接的通信,它分为服务器端和 客户端两部分,其主要实现过程如图3.1所示。UDP服务恭端2、UDP执行两种功能:(1)向 IP 层添加另一个寻址(端口)层;(2)检测传输中可能发生的数据损坏,并丢弃任何损坏的数据报。3、UDP与 TCP的区别:(1)UDF套接字在使用之

3、前不必进行连接;(2)UDF套接字会保留消息边界,而TCP是一种字节流协议,不会保留它们;(3)UDP提供的端到端服务是一种“尽力而为”的服务:不保证通过UDP套接字发送的消息将会到达其目的地。4、UDP应答客户执行步骤:(1) 把应答字符串发送给服务器;(2) 接受应答;( 3) 关闭程序。5、UDP服务器:永远循环,接收一条消息,然后把相同的消息发送回它的任何发源地。五、实验步骤1、UDE服务器(udpserver.c )( 1 )、登陆进入 ubuntu 操作系统,新建一个文件,命名为 udpserver.c (为了方便起 见,可以进入homW,再进入用户目录,在用户目录下新建udpse

4、rver.c )。( 2)、在 udpserver.c 中编写服务器端程序代码并保存。(3) 、在终端” (“ Applications ”宀附件”宀终端”)中执行命令进入udpserver.c所在目录。( pwd 命令可以显示当前所在目录; ls 命令可以显示当前目录下的 文件和文件夹信息; cd. 命令可以进入上一级目录; cd 目录名 命令可以进入 当前所示的某个目录。)(4) 、执行命令 gcc - o udpserver udpserver.c生成可执行文件 udpserver 。(5) 、执行命令 ./ udpserver ,观察结果。(6) 、认真分析源代码,体会如何编写一个UD

5、P服务器端程序。2、UDP客户端(udpclient.c )(1 )、登陆进入 ubuntu 操作系统,新建一个文件,命名为 udpclient.c (为了方便起 见,可以进入homW,再进入用户目录,在用户目录下新建udpclient.c)。(2) 、在 udpclient.c中编写客户端程序代码并保存。将实验三完成的 udpserver.c 拷贝到与 udpclient.c 同一目录下。(3) 、在终端” (“ Applications ”宀附件”宀终端”)中执行命令进入udpserver.c禾口 udpclie nt.c所在目录。(4) 、执行命令 gcc - o udpserver u

6、dpserver.c生成可执行文件 udpserver 。(5) 、执行命令 ./ udpserver 。(6) 、再开一个终端”,进入 udpserver.c和udpclie nt.c所在目录,执行命令gcc - o udpclient udpclient.c生成可执行文件 udpclient 。(7) 、执行命令 ./ udpclient 127.0.0.1 hello。(8) 、观察两个“终端”出现的结果。(9) 、在客户端终端下执行命令./ udpclient 127.0.0.1 bye。(10) 、观察两个“终端”出现的结果。( 11 )、认真分析源代码,体会如何编写一个 UDP 客

7、户端程序。六、实验代码及分析Udpserver.c#i nclude #in elude #in elude #in elude #in elude #i nclude #in clude #in clude L 定义端口号和最大数据单元#defi ne PORT 1234#defi ne MAXDATASIZE 100main () int sockfd;/标识套接口的描述字struct sockaddr_i n server;/服务器struct sockaddr_i n clie nt;客户端socklen_t addrle n;地址长度int num;/作为成功接收数据长度与否的标志c

8、har bufMAXDATASIZE;数据缓冲区if (sockfd = socket(AF_INET, SOCK_DGRAM, 0) = -1)/ perror(Creat ing socket failed.);exit(1);bzer o(&server,sizeof(server); server.sin_family=AF_INET;/ server.sin_port=ht on s(PORT);、IPv4协议,数据报套接口创建套接字/初始化地址结构地址族端口号套接字的设置server.sin_addr.s_addr = htonl (INADDR_ANY);32位 IPv4 地址i

9、f (bin d(sockfd, (struct sockaddr *)& server, sizeof(server) = -1) perror(Bi nd() error.);exit(1);addrle n=sizeof(clie nt);while (1)num = recvfrom(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)& clie nt,&addrle n);/sockfd套接口 ,buf接收数据的缓冲区,MAXDATASIZ接收数据缓冲区的最大长度,(struct sockaddr *)&client客户端首地址,&addrlen

10、客户端地址长度if (num 0)perror(recvfrom() errorn); exit(1);客户端地址长度绑定套接字A数据接收并处理bufnum = 0; 打印缓冲区prin tf(You got a message (%s%) from clie nt.nits ip is %s, port is%d.n,buf,i net_n toa(clie nt.s in _addr),ht on s(clie nt.s in _port);数据发送sen dto(sockfd,Welcome to my server.n,22,0,(structsockaddr* )& clie nt,

11、addrle n); if (!strcmp(buf,bye)break;close(sockfd);/关闭套接字Udpclie nt.c#i nclude #i nclude #in clude #in clude 、 头文件#in clude #in clude #in clude #in clude -#defi ne PORT 1234#defi ne MAXDATASIZE 100int mai n(int argc, char *argv)服务器的地址和名称作为参数传入int sockfd, n um;套接字描述字char bufMAXDATASIZE;缓冲区struct host

12、e nt *he;struct sockaddr_i n server,peer;if (argc !=3)验证给定的字符串是否满足限制prin tf(Usage: %s n,argv0);/不满足,打印第一个字符串的地址及信息exit(1);if (he=gethostby name(argv1)=NULL)确定地址信息prin tf(gethostb yn ame() errorn ”);exit(1);if (sockfd=socket(AF_INET, SOCK_DGRAM, 0)=-1)创建套接字prin tf(socket() error n);exit(1);bzero(&ser

13、ver,sizeof(server);初始化地址结构server.sin_family = AF_INET;server.sin_port = hton s(PORT);server.s in _addr = *(struct in _addr *)he-h_addr);sen dto(sockfd, argv2, strle n( argv2),0,(struct sockadd*)& server,sizeof(server);/数据发送sockle n_t addrle n;addrle n=sizeof(server);服务器地址长度while (1)if (num=recvfrom(

14、sockfd,buf,MAXDATASIZE,0,(structsockaddr *)&peer,&addrlen)-1)/ sockfd 套接口 ,buf接收数据的缓冲区,MAXDATASIZ接收数据缓冲区的最大长度, (struct sockaddr *)&peer服务器首地址,&addrlen服务器地址长度prin tf(recvfrom() errorn);exit(1);if (addrle n != sizeof(server) | memcmp(c onst void *)& server, (const void*)&peer,addrle n) != 0)/若没有将套接字绑定或接受了其他端口信息,打印应答消息prin tf(Receive message from other server.n);con ti nue;bufn um=0;打印缓冲区prin tf(Server Message: %sn ,buf);break;close(sockfd);/关闭套接字七、实验结果输入:./udpclie nt 127.0.0.1/hello客户端:输出:Server Message:Welcome to my server

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论