UDP服务器及客户端程序设计.doc

上传人:叶*** 文档编号:35080094 上传时间:2022-08-20 格式:DOC 页数:9 大小:39KB
返回 下载 相关 举报
UDP服务器及客户端程序设计.doc_第1页
第1页 / 共9页
UDP服务器及客户端程序设计.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《UDP服务器及客户端程序设计.doc》由会员分享,可在线阅读,更多相关《UDP服务器及客户端程序设计.doc(9页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

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

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

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

4、命令进入所在目录。pwd 命令可以显示当前所在目录;ls 命令可以显示当前目录下的文件与文件夹信息;cd.命令可以进入上一级目录;cd 目录名 命令可以进入当前所示的某个目录。4、执行命令gcc o udpserver udpserver.c 生成可执行文件udpserver。5、执行命令./ udpserver,观察结果。6、认真分析源代码,体会如何编写一个UDP 效劳器端程序。2、UDP客户端udpclient.c1、登陆进入ubuntu 操作系统,新建一个文件,命名为为了方便起见,可以进入“home,再进入用户目录,在用户目录下新建。2、在udpclient.c 中编写客户端程序代码并保

5、存。将实验三完成的udpserver.c 拷贝到与udpclient.c 同一目录下。3、 在“终端“Applications“附件“终端中执行命令进入与udpclient.c 所在目录。4、执行命令gcc o udpserver udpserver.c 生成可执行文件udpserver。5、执行命令./ udpserver。6、再开一个“终端,进入udpserver.c 与udpclient.c 所在目录,执行命令gcc o udpclient udpclient.c 生成可执行文件udpclient。7、执行命令./ udpclient 127.0.0.1 hello。8、观察两个“终端出

6、现的结果。9、在客户端终端下执行命令./ udpclient 127.0.0.1 bye。10、观察两个“终端出现的结果。11、认真分析源代码,体会如何编写一个UDP 客户端程序。六、实验代码及分析U#include #include #include 头文件#include #include #include #include #include 定义端口号与最大数据单元#define PORT 1234#define MAXDATASIZE 100main()int sockfd;/标识套接口的描述字struct sockaddr_in server;/效劳器struct sockaddr_

7、in client;/客户端socklen_t addrlen;/地址长度int num;/作为成功接收数据长度与否的标志char bufMAXDATASIZE;/数据缓冲区if (sockfd = socket(AF_INET, SOCK_DGRAM, 0) = -1)/ IPv4协议, 数据报套接口创立套接字perror(Creating socket failed.);exit(1);bzero(&server,sizeof(server); /初始化地址构造套接字的设置server.sin_family=AF_INET;/地址族server.sin_port=htons(PORT);端

8、口号server.sin_addr.s_addr = htonl (INADDR_ANY); 32位IPv4地址if (bind(sockfd, (struct sockaddr *)&server, sizeof(server) = -1)绑定套接字perror(Bind() error.);exit(1);addrlen=sizeof(client);/客户端地址长度while (1)num = recvfrom(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)&client,&addrlen);数据接收并处理/sockfd套接口,buf接收数据的缓

9、冲区,MAXDATASIZE接收数据缓冲区的最大长度,(struct sockaddr *)&client客户端首地址,&addrlen客户端地址长度if (num 0)perror(recvfrom() errorn);exit(1);bufnum = 0;/打印缓冲区printf(You got a message (%s%) from client.nIts ip is %s, port is%d.n,buf,inet_ntoa(client.sin_addr),htons(client.sin_port);数据发送sendto(sockfd,Welcome to my server.n

10、,22,0,(structsockaddr*)&client,addrlen);if (!strcmp(buf,bye)break;关闭套接字close(sockfd);/U#include #include #include 头文件#include #include #include #include #include #define PORT 1234#define MAXDATASIZE 100int main(int argc, char *argv)/效劳器的地址与名称作为参数传入int sockfd, num;/套接字描述字char bufMAXDATASIZE;/缓冲区struc

11、t hostent *he;struct sockaddr_in server,peer;if (argc !=3)/验证给定的字符串是否满足限制printf(Usage: %s n,argv0);/不满足,打印第一个字符串的地址及信息exit(1);if (he=gethostbyname(argv1)=NULL)/确定地址信息printf(gethostbyname() errorn);exit(1);if (sockfd=socket(AF_INET, SOCK_DGRAM, 0)=-1)/创立套接字printf(socket() errorn);exit(1);bzero(&serve

12、r,sizeof(server);/初始化地址构造server.sin_family = AF_INET;server.sin_port = htons(PORT);server.sin_addr = *(struct in_addr *)he-h_addr);sendto(sockfd, argv2, strlen(argv2),0,(struct sockadd *)&server,sizeof(server);/数据发送socklen_t addrlen;addrlen=sizeof(server);/效劳器地址长度while (1)if (num=recvfrom(sockfd,buf

13、,MAXDATASIZE,0,(struct sockaddr *)&peer,&addrlen) =-1)/ sockfd套接口,buf接收数据的缓冲区,MAXDATASIZE接收数据缓冲区的最大长度,(struct sockaddr *)&peer效劳器首地址,&addrlen效劳器地址长度printf(recvfrom() errorn);exit(1);if (addrlen != sizeof(server) | memcmp(const void *)&server, (const void*)&peer,addrlen) != 0)/假设没有将套接字绑定或承受了其他端口信息,打印

14、应答消息printf(Receive message from other server.n);continue;bufnum=0;/打印缓冲区printf(Server Message: %sn,buf);break;close(sockfd);/关闭套接字七、实验结果效劳器:you got a message (hello%) from client.Its ip is 127.0.0.1,pot is 38925.客户端:输出:Server Message:Welcome to my server效劳器:you got a message (bye%) from client.Its ip is 127.0.0.1,pot is 43158.客户端:输出:Server Message:Welcome to my server第 9 页

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 施工组织

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com