資源簡介
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
- 上一篇:基于預測分析表法的語法分析程序
- 下一篇:演化博弈仿真
評論
共有 條評論