资源简介
1.基于数据报套接字的服务器回射程序设计
编写一服务器程序和客户程序,如图1,要求客户每输入一行数据,服务器接收后加上echo:回送给客户程序,当客户输入“q”后退出。
2. 无连接应用程序丢包率测试
UDP的不可靠性使得基于该协议的应用程序在数据通信过程中不可避免地会遇到丢包现象。一方面,网络拥塞导致路由器转发数据报文时丢失;另一方面,慢速设备来不及处理快速到达的数据报文,使得接收缓存溢出而丢包,等等。在应用程序开发前,设计者需要对当前的网络状况和主机性能进行测试,以确定选择哪种协议承载运输、使用循环方式还是并发方式处理网络通信等等,其中丢包率测试是常用的项目,它可以辅助设计者对程序的可靠性进行直观的探测和诊断。
使用数据报套接字编程,在网络功能框架的基础上对回射服务器和客户端进行修改,实现丢包率测试工具。其中,服务器能够接收客户端发来的数据,统计数据报个数;客户端能够根据用户的指示向服务器批量发送数据。丢包率的计算公式如下:
丢包率=1-(服务器收到的报文个数/客户端发送的报文个数)×100%
要求实现接收缓存大小的修改功能,控制接收数据包的速度,能够给服务器在接收缓存取不同值时丢包率的变化。画出数据表格,并给出分析。
代码片段和文件信息
// UdpClient.cpp : 定义控制台应用程序的入口点。
//
#include “stdafx.h“
#include
#include
#include
#include
#pragma comment(lib“WS2_32.lib“)
#define BUF_SIZE 1024
int _tmain(int argc _TCHAR* argv[])
{
//声明变量
WSADATA wsaData;
SOCKET Socket;
SOCKADDR_IN RecvAddr;
SOCKADDR_IN SendAddr;
int port = 27015;
char buf[BUF_SIZE];
char ip[BUF_SIZE];
int SendAddrSize = sizeof(SendAddr);
//初始化Socket环境
if(WSAStartup(MAKEWORD(22)&wsaData) != 0)
{
printf(“WSAStartup failed !\n“);
return -1;
}
//创建用于监听的Socket
Socket = socket(AF_INETSOCK_DGRAMIPPROTO_UDP);
if(INVALID_SOCKET == Socket)
{
printf(“socket failed !\n“);
WSACleanup();
return -1;
}
//设置服务器Socket地址
printf(“Please input server IP! “);
std::string ServerIP;
std::getline(std::cinServerIP);
strcpy_s(ipServerIP.c_str());
//设置服务器Socket地址
RecvAddr.sin_family = AF_INET;
RecvAddr.sin_port = htons(port);
RecvAddr.sin_addr.S_un.S_addr = inet_addr(ip);
//向服务器发送信息,并接收回射信息
while(true){
printf(“Please input a string to send UDP: “);
std::string str;
std::getline(std::cinstr);
ZeroMemory(bufBUF_SIZE);
strcpy_s(bufstr.c_str());
//向服务器发送信息
int retVal = sendto(SocketbufBUF_SIZE0(SOCKADDR*)&RecvAddrsizeof(RecvAddr));
if(SOCKET_ERROR == retVal)
{
printf(“recv failed !\n“);
break;
}
ZeroMemory(bufBUF_SIZE);
//接收服务器回射信息
retVal = recvfrom(SocketbufBUF_SIZE0(SOCKADDR*)&SendAddr&SendAddrSize);
if(SOCKET_ERROR == retVal)
{
printf(“recv failed !\n“);
break;
}
//如果收到“quit”,则客户端退出,否则显示回射信息
if(strcmp(buf“quit“) == 0)
{
printf(“quit!\n“);
break;
}
printf(“Recv From Server UDP: %s\n“buf);
}
//释放Socket
printf(“Closing socket. UDP\n“);
closesocket(Socket);
WSACleanup();
//暂停,按任意键退出
system(“pause“);
return 0;
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 543 2012-10-11 21:09 Readme.txt
文件 556032 2012-12-01 10:01 基于数据报套接字的回射程序设计与实验.doc
文件 48128 2012-10-11 20:38 exe\UdpClient.exe
文件 51712 2012-10-11 20:45 exe\UdpClientfr
文件 30208 2012-10-11 20:42 exe\UdpServer.exe
文件 31232 2012-10-11 20:56 exe\UdpServerfr
文件 2025 2012-10-11 20:37 src\UdpClient.cpp
文件 3058 2012-10-11 20:46 src\UdpClient.h
文件 242 2012-10-11 20:46 src\UdpClientfr
文件 2420 2012-10-11 20:49 src\UdpServer.cpp
文件 3479 2012-10-11 21:00 src\UdpServer.h
文件 230 2012-10-11 20:57 src\UdpServerfr
文件 3686 2012-10-12 20:47 丢包率测试程序和代码\UdpClient.h
文件 464 2012-10-12 21:22 丢包率测试程序和代码\UdpClientfr
文件 57344 2012-10-12 21:01 丢包率测试程序和代码\UdpClientfr
文件 4621 2012-10-12 21:16 丢包率测试程序和代码\UdpServer.h
文件 262 2012-10-12 20:11 丢包率测试程序和代码\UdpServerfr
文件 33280 2012-10-12 21:10 丢包率测试程序和代码\UdpServerfr
目录 0 2012-10-11 21:08 exe
目录 0 2012-10-12 21:22 src
目录 0 2012-10-12 21:23 丢包率测试程序和代码
----------- --------- ---------- ----- ----
828966 21
- 上一篇:基于预测分析表法的语法分析程序
- 下一篇:演化博弈仿真
评论
共有 条评论