欢迎来到天天文库
浏览记录
ID:57437384
大小:76.82 KB
页数:11页
时间:2020-08-16
《性能测试脚本SocketUDP协议.docx》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、性能测试脚本Socket_UDP协议————————————————————————————————作者:————————————————————————————————日期:一.UDP和Socket通信步骤1.UDPServer程序1、编写UDPServer程序的步骤(1)使用socket()来建立一个UDPsocket,第二个参数为SOCK_DGRAM。(2)初始化sockaddr_in结构的变量,并赋值。sockaddr_in结构定义:structsockaddr_in{uint8_tsin_len;sa_family_tsin_family;in_port_tsin_port;str
2、uctin_addrsin_addr;charsin_zero[8];};这里使用“08”作为服务程序的端口,使用“INADDR_ANY”作为绑定的IP地址即任何主机上的地址。(3)使用bind()把上面的socket和定义的IP地址和端口绑定。这里检查bind()是否执行成功,如果有错误就退出。这样可以防止服务程序重复运行的问题。(4)进入无限循环程序,使用recvfrom()进入等待状态,直到接收到客户程序发送的数据,就处理收到的数据,并向客户程序发送反馈。这里是直接把收到的数据发回给客户程序。2、udpserv.c程序内容:#include#include3、ys/socket.h>#include#include#include#include#defineMAXLINE80#defineSERV_PORT8888voiddo_echo(intsockfd,structsockaddr*pcliaddr,socklen_tclilen){intn;socklen_tlen;charmesg[MAXLINE];for(;;){len=clilen;/*waitingforreceivedata*/n=recvfrom(sockfd,mesg,MAXLINE,0,4、pcliaddr,&len);/*sentdatabacktoclient*/sendto(sockfd,mesg,n,0,pcliaddr,len);}}intmain(void){intsockfd;structsockaddr_inservaddr,cliaddr;sockfd=socket(AF_INET,SOCK_DGRAM,0);/*createasocket*//*initservaddr*/bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(I5、NADDR_ANY);servaddr.sin_port=htons(SERV_PORT);/*bindaddressandporttosocket*/if(bind(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr))==-1){perror("binderror");exit(1);}do_echo(sockfd,(structsockaddr*)&cliaddr,sizeof(cliaddr));return0;}2.UDPClient程序1、编写UDPClient程序的步骤(1)初始化sockaddr_in结构的变量,并赋值。这里使用6、“8888”作为连接的服务程序的端口,从命令行参数读取IP地址,并且判断IP地址是否符合要求。(2)使用socket()来建立一个UDPsocket,第二个参数为SOCK_DGRAM。(3)使用connect()来建立与服务程序的连接。与TCP协议不同,UDP的connect()并没有与服务程序三次握手。上面我们说了UDP是非连接的,实际上也可以是连接的。使用连接的UDP,kernel可以直接返回错误信息给用户程序,从而避免由于没有接收到数据而导致调用recvfrom()一直等待下去,看上去好像客户程序没有反应一样。(4)向服务程序发送数据,因为使用连接的UDP,所以使用write()来替代7、sendto()。这里的数据直接从标准输入读取用户输入。(5)接收服务程序发回的数据,同样使用read()来替代recvfrom()。(6)处理接收到的数据,这里是直接输出到标准输出上。2、udpclient.c程序内容:#include#include#include#include#include
3、ys/socket.h>#include#include#include#include#defineMAXLINE80#defineSERV_PORT8888voiddo_echo(intsockfd,structsockaddr*pcliaddr,socklen_tclilen){intn;socklen_tlen;charmesg[MAXLINE];for(;;){len=clilen;/*waitingforreceivedata*/n=recvfrom(sockfd,mesg,MAXLINE,0,
4、pcliaddr,&len);/*sentdatabacktoclient*/sendto(sockfd,mesg,n,0,pcliaddr,len);}}intmain(void){intsockfd;structsockaddr_inservaddr,cliaddr;sockfd=socket(AF_INET,SOCK_DGRAM,0);/*createasocket*//*initservaddr*/bzero(&servaddr,sizeof(servaddr));servaddr.sin_family=AF_INET;servaddr.sin_addr.s_addr=htonl(I
5、NADDR_ANY);servaddr.sin_port=htons(SERV_PORT);/*bindaddressandporttosocket*/if(bind(sockfd,(structsockaddr*)&servaddr,sizeof(servaddr))==-1){perror("binderror");exit(1);}do_echo(sockfd,(structsockaddr*)&cliaddr,sizeof(cliaddr));return0;}2.UDPClient程序1、编写UDPClient程序的步骤(1)初始化sockaddr_in结构的变量,并赋值。这里使用
6、“8888”作为连接的服务程序的端口,从命令行参数读取IP地址,并且判断IP地址是否符合要求。(2)使用socket()来建立一个UDPsocket,第二个参数为SOCK_DGRAM。(3)使用connect()来建立与服务程序的连接。与TCP协议不同,UDP的connect()并没有与服务程序三次握手。上面我们说了UDP是非连接的,实际上也可以是连接的。使用连接的UDP,kernel可以直接返回错误信息给用户程序,从而避免由于没有接收到数据而导致调用recvfrom()一直等待下去,看上去好像客户程序没有反应一样。(4)向服务程序发送数据,因为使用连接的UDP,所以使用write()来替代
7、sendto()。这里的数据直接从标准输入读取用户输入。(5)接收服务程序发回的数据,同样使用read()来替代recvfrom()。(6)处理接收到的数据,这里是直接输出到标准输出上。2、udpclient.c程序内容:#include#include#include#include#include
此文档下载收益归作者所有