• 大小: 536KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-08-06
  • 语言: 其他
  • 标签:

资源简介

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\UdpClientframe.exe

     文件      30208  2012-10-11 20:42  exe\UdpServer.exe

     文件      31232  2012-10-11 20:56  exe\UdpServerframe.exe

     文件       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\UdpClientframe.cpp

     文件       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\UdpServerframe.cpp

     文件       3686  2012-10-12 20:47  丢包率测试程序和代码\UdpClient.h

     文件        464  2012-10-12 21:22  丢包率测试程序和代码\UdpClientframe.cpp

     文件      57344  2012-10-12 21:01  丢包率测试程序和代码\UdpClientframe.exe

     文件       4621  2012-10-12 21:16  丢包率测试程序和代码\UdpServer.h

     文件        262  2012-10-12 20:11  丢包率测试程序和代码\UdpServerframe.cpp

     文件      33280  2012-10-12 21:10  丢包率测试程序和代码\UdpServerframe.exe

     目录          0  2012-10-11 21:08  exe

     目录          0  2012-10-12 21:22  src

     目录          0  2012-10-12 21:23  丢包率测试程序和代码

----------- ---------  ---------- -----  ----

               828966                    21


评论

共有 条评论

相关资源