1 / 11
文档名称:

可靠的数据传输协议rdt的模拟实现.docx

格式:docx   大小:61KB   页数:11页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

可靠的数据传输协议rdt的模拟实现.docx

上传人:565369829 2022/7/21 文件大小:61 KB

下载得到文件列表

可靠的数据传输协议rdt的模拟实现.docx

相关文档

文档介绍

文档介绍:可靠的数据传输协议rdt的模拟实现
姓名:陈锋 学号:25
一、实验目的:
加深对可靠的数据传输协议(包括链路层、传输层和应用层)的理解。
二、实现的功能与要求
、功能
(1)由一台PC (线程)向另一台PC (线程)发送数据包t();
// Overrides
public:
void SetRcvNotifyMsg(UINT nMsg);
UINT uRcvMsg;
void SetNotifyWnd(HWND hNtf);
private:
HWND hNotifyWnd;
};
建立套接字
不管是客户端程序,还是服务器端程序,都需要在运行的时候去建立套接字。
唯一的区别是:服务器端建立一个套接字,然后开始无限循环;每当它通过循环 接收到一个连接,则打印出一个信息,客户端建立套接字,然后与命令行给出的 套接字连接;连接结束时,在连接上发送 一个消息,然后关闭套接字。
sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror( "openstgeam socket " );
exit(1); }
在客户端中,使用命令行中指定的名字连接套接字
=AF_INET;
hp = gethostbyname(argv[1]);
if (hp == 0) {
fprintf(stderr, "%s n” argv[1]);
exit(2);
}
memcpy((char*)&, (char*)hp->;h_addr, hp->;h_length);
= htons(atoi(argv[2]));
if (connect(sock, (struct sockaddr*)&server, sizeof(server)) < 0) { perror( "connectingream socket " );
exit(3);
}
if (send(sock, DATA, sizeof(DATA)) < 0)
perror( "sendorg stream socke " );
closesocket(sock);
exit(0);
}
在服务器端,使用任意端口命名套接字
=AF_INET;
=INADDR_ANY;
if (bind(sock, (struct sockaddr *)&server, sizeof(server)) < 0) {
perror( "bindisbjeam socket " );
exit(1);
}
在服务器端,找出指定的端口号并打印出来
length = sizeof(server);
if (getsockname(sock, (struct sockaddr *)&server, &length) < 0) {
perror( "gettsigpket name');
exit(1);
}
printf( "socket n" ntohs);
客户端先发起一次会话,要求建立通信,服务器端开始接收连接
listen(sock, 5);
len = sizeof(struct sockaddr);
do {
msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len);
if (msgsock == -1)
perror( "accept " );
else do
{ memset(buf, 0, sizeof(buf));
if ((rval = recv(msgsock, buf, 1024)) < 0) perror( " readintgeam message");
if (rval == 0)
printf( "ending n" );
else
printf( " n” buf); }while (rval != 0);
closesocket(msgsock);
} while (TRUE);
exit(0);
}
注意:因为这个程序已经有了一个无限循环,所以套接字 “soclk1来不显式
关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。
六、结果分析
图4客户端界面
S3 UlDTRecv
接收信息:
数据: 臼

图5服务器端界面
运行时,同时启动两个线程 client和server。其中sever初始为监听状态, 可指定滑动窗口数目和要发送的帧总数,client端发出数据包,一个线程向另一 个线程发送数据包,界面显示出双方帧个数变化,帧序号等,动态显示出数据帧 的发送情况