Linux下的通信时延测试程序
来源:互联网 发布:cp雾化器二代做芯数据 编辑:程序博客网 时间:2024/05/01 15:29
今天段老师在网络软件设计课上布置了一个题目。
要求是windows环境,现在在linux环境下实现。
运行C/S模式的2个程序,使用UDP协议,发送10次,计算平均时延。
服务器程序如下:
#include <sys/socket.h> // for functions for socket#include <netinet/in.h> // for struct sockaddr_in#include <stdlib.h>#include <memory.h> // for memset#include <stdio.h> // for perror#include <errno.h> // for errno#define BUFLEN 100int main(void){ int listenfd; char buf[BUFLEN]; socklen_t len; struct sockaddr_in serv, cli; if ((listenfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { // use udp perror("socket"); exit(EXIT_FAILURE); } memset(&serv, 0, sizeof(serv)); // clear serv.sin_family = AF_INET; // use IPv4 // Listen any ip address and use network // byte order serv.sin_addr.s_addr = htonl(INADDR_ANY); serv.sin_port = htons(9877); // Listen port 9877 if (bind(listenfd, (struct sockaddr*)&serv, sizeof(serv)) < 0) { // bind the socket to the server address perror("bind"); exit(EXIT_FAILURE); } for ( ; ; ) { len = sizeof(cli); if ((recvfrom(listenfd, buf, BUFLEN, 0, (struct sockaddr*)&cli, &len)) < 0) { // recvfrom the listenfd // put the message into buf // no flags (4th argument 0) // save the client address and length if (errno == EINTR || errno == EAGAIN) continue; perror("recvfrom"); exit(EXIT_FAILURE); } if ((sendto(listenfd, "Got it!", 10, 0, (struct sockaddr*)&cli, len)) < 0) { // send the message back // send message "Got it!" back if (errno == EINTR || errno == EAGAIN) continue; perror("sendto"); exit(EXIT_FAILURE); } } return 0;}
客户端程序如下:
#include <sys/socket.h> // for functions for socket#include <arpa/inet.h> // for inet_pton#include <netinet/in.h> // for struct sockaddr_in#include <stdlib.h>#include <memory.h> // for memset#include <stdio.h> // for perror#include <errno.h> // for errno#include <time.h>#define SENDTIMES 10#define BUFLEN 100int main(int argc, char* argv[]){ struct sockaddr_in serv; int sockfd; int i; clock_t start, finish; double duration, total = 0; char buf[BUFLEN]; if (argc != 2) { fprintf(stderr, "Usage: ./udpcli <IPADDR>\n"); exit(EXIT_FAILURE); } if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { // use udp perror("socket"); exit(EXIT_FAILURE); } memset(&serv, 0, sizeof(serv)); serv.sin_family = AF_INET; serv.sin_port = htons(9877); if ((inet_pton(AF_INET, argv[1], &serv.sin_addr)) == 0) { // read the string to the structrue perror("inet_pton"); exit(EXIT_FAILURE); }again: if ((connect(sockfd, (struct sockaddr*)&serv, sizeof(serv))) < 0) { // this connect is for catch the // error ICMP packets if (errno == EINTR || errno == EAGAIN) goto again; perror("connect"); exit(EXIT_FAILURE); } for (i = 0; i < SENDTIMES; ++i) { printf("Send %d messages.\n", i + 1); start = clock();again2: if ((sendto(sockfd, "A message!", 20, 0, (struct sockaddr*)&serv, sizeof(serv))) < 0) { if (errno == EINTR) goto again2; perror("sendto"); exit(EXIT_FAILURE); }again3: if ((recvfrom(sockfd, buf, BUFLEN, 0, NULL, NULL)) < 0) { if (errno == EINTR) goto again3; perror("recvfrom"); exit(EXIT_FAILURE); } finish = clock(); duration = finish - start; printf("Spend time: %fms\n", duration); total += duration; } printf("\nAverage time: %fms\n", total / SENDTIMES); return 0;}
运行结果为:
<img src="http://img.blog.csdn.net/20150312120444160?wate%3Ca%20href=" http:="" www.ahlinux.com="" start="" cmd="" 9034.html"="" target="_blank" class="keylink" style="margin: 0px; padding: 3px; border: 1px solid rgb(204, 204, 204); max-width: 660px;">rmark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGRjeHMwMDc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" style="display: block;" />
0 0
- Linux下的通信时延测试程序
- Linux下的通信时延测试程序
- linux下的管道通信程序
- linux下的管道通信程序
- linux下的串口通信程序详解
- Bluez下的rfcomm层通信测试程序
- Bluez下的rfcomm层通信测试程序
- linux下测试程序运行的时间
- Linux 下HelloWorld程序的一些测试
- Linux下测试程序的运行时间
- linux下测试程序运行的时间
- Linux下测试程序的运行时间
- UNIX下TCP/IP通信测试程序
- Linux下两个程序进行socket通信的简单例子
- linux下基于TCP简单的socket通信程序
- Linux下两个程序进行socket通信的简单例子
- linux下简单的UDP对等通信程序
- Linux下基于QT的串口通信程序(Tiny6410)
- chromium浏览器开发系列第一篇:如何获取最新chromium源码
- Android PagerSlidingTabStrip可实现滑动导航栏效果
- Python下配置OpenCV
- 创业帝国
- 机器学习与深度学习相关算法的学习
- Linux下的通信时延测试程序
- intent
- 非阻塞Connect对于select时应注意问题
- Java开发中的23种设计模式详解
- Matrix矩阵计算
- HttpServletRequest应用
- iOS开发UI篇—常见的项目文件介绍
- 不同部门之间的互访
- Zimbra协作套件(v8.5)产品版本比较