已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验二 UDP 服务器及客户端程序设计一、实验目的1、学习和掌握Linux 下的UDP 服务器基本原理和基本编程方法。2、学习和掌握Linux 下的UDP 客户端基本原理和基本编程方法。二、实验平台ubuntu-8.04 操作系统三、实验内容1、编写Linux 下UDP 服务器套接字程序,服务器接收客户端发送的信息并显示,同时显示客户的IP 地址、端口号,并向客户端发送信息。如果服务器接收的客户信息为“bye”,则退出循环,并关闭套接字。2、编写Linux 下UDP 客户端套接字程序,结合实验三的UDP 服务器端程序,实现以下功能:(1)客户根据用户提供的IP 地址将用户从终端输入的信息发送给服务器,然后等待服务器的回应。(2)服务器接收客户端发送的信息并显示,同时显示客户的IP 地址、端口号,并向客户端发送信息。如果服务器接收的客户信息为“bye”,则退出循环,并关闭套接字。(3)客户接收、显示服务器发回的信息,并关闭套接字。四、实验原理1、使用UDP 套接字编程可以实现基于TCP/IP 协议的面向无连接的通信,它分为服务器端和客户端两部分,其主要实现过程如图3.1 所示。2、UDP执行两种功能:(1) 向IP层添加另一个寻址(端口)层;(2) 检测传输中可能发生的数据损坏,并丢弃任何损坏的数据报。3、UDP与TCP的区别:(1) UDP套接字在使用之前不必进行连接;(2) UDP套接字会保留消息边界,而TCP是一种字节流协议,不会保留它们;(3) UDP提供的端到端服务是一种“尽力而为”的服务:不保证通过UDP套接字发送的消息将会到达其目的地。4、UDP应答客户执行步骤:(1) 把应答字符串发送给服务器;(2) 接受应答;(3) 关闭程序。5、UDP服务器:永远循环,接收一条消息,然后把相同的消息发送回它的任何发源地。五、实验步骤1、UDP服务器(udpserver.c)(1)、登陆进入ubuntu 操作系统,新建一个文件,命名为udpserver.c(为了方便起见,可以进入“home”,再进入用户目录,在用户目录下新建udpserver.c)。(2)、在udpserver.c 中编写服务器端程序代码并保存。(3)、 在“终端”(“Applications”“附件”“终端”)中执行命令进入udpserver.c所在目录。(pwd 命令可以显示当前所在目录;ls 命令可以显示当前目录下的文件和文件夹信息;cd.命令可以进入上一级目录;cd 目录名 命令可以进入当前所示的某个目录。)(4)、执行命令gcc o udpserver udpserver.c 生成可执行文件udpserver。(5)、执行命令./ udpserver,观察结果。(6)、认真分析源代码,体会如何编写一个UDP 服务器端程序。2、UDP客户端(udpclient.c)(1)、登陆进入ubuntu 操作系统,新建一个文件,命名为udpclient.c(为了方便起见,可以进入“home”,再进入用户目录,在用户目录下新建udpclient.c)。(2)、在udpclient.c 中编写客户端程序代码并保存。将实验三完成的udpserver.c 拷贝到与udpclient.c 同一目录下。(3)、 在“终端”(“Applications”“附件”“终端”)中执行命令进入udpserver.c和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)、观察两个“终端”出现的结果。(9)、在客户端终端下执行命令./ udpclient 127.0.0.1 bye。(10)、观察两个“终端”出现的结果。(11)、认真分析源代码,体会如何编写一个UDP 客户端程序。六、实验代码及分析Udpserver.c#include #include #include 头文件#include #include #include #include #include 定义端口号和最大数据单元#define PORT 1234#define MAXDATASIZE 100main()int sockfd;/标识套接口的描述字struct sockaddr_in server;/服务器struct sockaddr_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);端口号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接收数据的缓冲区,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,22,0,(structsockaddr*)&client,addrlen);if (!strcmp(buf,bye)break;关闭套接字close(sockfd);/Udpclient.c#include #include #include 头文件#include #include #include #include #include #define PORT 1234#define MAXDATASIZE 100int main(int argc, char *argv)/服务器的地址和名称作为参数传入int sockfd, num;/套接字描述字char bufMAXDATASIZE;/缓冲区struct 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(&server,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,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)/若没有将套接字绑定或接受了其他端口信息,打印应答消息printf(Receive message from other server.n);continue;bufnum=0;/打印缓冲区printf(Server Message: %sn,buf);break;close(sockfd);/关闭套接字七、实验结果输入:./udpclient 127.0.0.1/hello服务器:you got a message (hello%) from cl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 廊坊会计考试题库及答案
- 2026三年级数学下册 面积综合应用
- 保安宿舍管控制度
- 加气操作员证试题及答案
- 重庆地理特岗试题及答案
- 企业如何制定员工休假制度
- 4.3 依法履行义务 课件 2025-2026学年统编版道德与法治八年级下册
- 土木工程项目部奖惩制度
- 公司资材管理奖惩制度
- 合同管理考核奖惩制度
- 2026贵州毕节织金县部分县直单位公开考调工作人员47人实施笔试参考题库及答案解析
- 2026年六安职业技术学院单招职业适应性考试题库附参考答案详解ab卷
- GB/T 27664.3-2026无损检测仪器超声检测设备的性能与检验第3部分:组合设备
- 2026广东江门职业技术学院管理教辅人员招聘4人备考题库带答案详解(基础题)
- GB/T 46977-2026铸造用再生砂氮、硫、磷含量测定方法
- 突发事件创伤伤员医疗救治规范2025年版
- 2026年跨境电商平台合同
- 卫生健康局法律顾问制度
- 2025年漳州市国企考试真题
- 钢铁企业消防安全培训课件
- 货梯使用专项安全培训课件
评论
0/150
提交评论