UDP服务器端客户端.doc_第1页
UDP服务器端客户端.doc_第2页
UDP服务器端客户端.doc_第3页
UDP服务器端客户端.doc_第4页
UDP服务器端客户端.doc_第5页
全文预览已结束

下载本文档

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

文档简介

一、实验目的学习和掌握Linux 下的UDP 服务器基本原理和基本编程方法。二、实验平台ubuntu-8.04 操作系统三、实验内容编写Linux 下 UDP服务器套接字程序,服务器接收客户端发送的信息并显示,同时显示客户的IP 地址、端口号,并向客户端发送信息。如果服务器接收的客户信息为“bye”,则退出循环,并关闭套接字。编写Linux 下TCP 客户端套接字程序,结合服务器端程序,实现以下功能:1、客户根据用户提供的IP 地址连接到相应的服务器;2、服务器等待客户的连接,一旦连接成功,则显示客户的IP 地址、端口号,并向客户端发送字符串;3、客户接收服务器发送的信息并显示。四、实验原理1、TCP 套接字编程可以实现基于TCP/IP 协议的面向连接的通信,它分为服务器端和客户端两部分,其主要实现过程如图2、UDP套接字基本步骤分为服务器端和客户端两部分:v 服务器端 建立UDP套接字; 绑定套接字到特定地址; 等待并接收客户端信息; 处理客户端请求; 发送信息回客户端; 关闭套接字;v 客户端步骤 建立UDP套接字; 发送信息给服务器; 接收来自服务器的信息; 关闭套接字3、UDP套接字编程的基本函数:v 网络连接函数 socket 创建套接字 bind 绑定本机端口 recvfrom 数据接收 sendto 数据发送 close 关闭套接字五、实验步骤 服务器端:1、登陆进入ubuntu 操作系统,新建一个文件,命名为tcpserver.c(为了方便起见,可以进入“home”,再进入用户目录,在用户目录下新建tcpserver.c)。2、在tcpserver.c 中编写服务器端程序代码并保存。3、在“终端”(“Applications”“附件”“终端”)中执行命令进入tcpserver.c所在目录。(pwd 命令可以显示当前所在目录;ls 命令可以显示当前目录下的文件和文件夹信息;cd.命令可以进入上一级目录;cd 目录名 命令可以进入当前所示的某个目录。)4、执行命令gcc o tcpserver tcpserver.c 生成可执行文件tcpserver。5、执行命令./ tcpserver,观察结果。6、认真分析源代码,体会如何编写一个TCP 服务器端程序。 客户端:1、登陆进入ubuntu 操作系统,新建一个文件,命名为tcpclient.c(为了方便起见,可以进入“home”,再进入用户目录,在用户目录下新建tcpclient.c)。2、在tcpclient.c 中编写客户端程序代码并保存。将实验一完成的tcpserver.c 拷贝到与tcpclient.c 同一目录下。3、在“终端”(“Applications”“附件”“终端”)中执行命令进入tcpserver.c和tcpclient.c 所在目录。4、执行命令gcc o tcpserver tcpserver.c 生成可执行文件tcpserver。5、执行命令./ tcpserver。6、再开一个“终端”,进入tcpserver.c 和tcpclient.c 所在目录,执行命令gcc o tcpclient tcpclient.c 生成可执行文件tcpclient。7、执行命令./ tcpclient 127.0.0.1。8、观察两个“终端”出现的结果。9、认真分析源代码,体会如何编写一个TCP 客户端程序。六、参考程序服务器端(udpserver.c)#include #include #include #include #include #include #include #include #define PORT 1234#define MAXDATASIZE 100main()int sockfd; /标识一个套接口的描述字struct sockaddr_in server; /定义两个Sockaddr_in的结构struct sockaddr_in client;socklen_t addrlen; /一个指向特定于协议的地址结构的长度int num; char bufMAXDATASIZE; /接收数据的缓冲区if (sockfd = socket(AF_INET, SOCK_DGRAM, 0) = -1) /创建套接字perror(Creating socket failed.);exit(1);bzero(&server,sizeof(server); /将socket_in server的结构清零server.sin_family=AF_INET; /为socket_in server赋初值IPV4server.sin_port=htons(PORT); server.sin_addr.s_addr = htonl (INADDR_ANY);if (bind(sockfd, (struct sockaddr *)&server, sizeof(server) = -1) /函数调用时,将这个结构强制转换为sockaddr类型perror(Bind() error.);exit(1);addrlen=sizeof(client); /地址参数(addr)的长度while (1)num = recvfrom(sockfd,buf,MAXDATASIZE,0,(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,(struct sockaddr *)&client,addrlen);/显示客户的IP 地址、端口号,并向客户端发送字符串;if (!strcmp(buf,bye) / 服务器接收的客户信息为“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); /客户根据用户提供的IP 地址连接到相应的服务器;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; /IPv4协议server.sin_port = htons(PORT); /字节排序函数server.sin_addr = *(struct in_addr *)he-h_addr); sendto(sockfd, argv2, strlen(argv2),0,(struct sockaddr *)&server,sizeof(server);socklen_t addrlen; /显示客户的IP 地址、端口号addrlen=sizeof(server);while (1)if (num=recvfrom(sockfd,buf,MAXDATASIZE,0,(struct sockaddr *)&peer,&addrlen) =-1) /判断是否接收到服务器端的信息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 client.Its ip is 1

温馨提示

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

评论

0/150

提交评论