此程序是用C++进行模拟tcp的“滑动窗口”操作,具体操作如下: 1、首先在提示下发送端输入发送信息和窗口大小 2、调用tcp()函数进行将发送端信息发送给接收端操作 3、具体具体原理如下: 1)发送端每次将窗口大小的信息传给接收端 2)接收端对收到信息进行存储,并发送ack确认给发送端 示例: 1、输入“qwertyuiopasdfghklzxc”作为发送信息
2、输入“5”作为窗口大小
4、输出tcp传输的过程
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
void print(char (*m)[30],char *n,int s,int l){
int i;
cout<<"发送端如下↓"<<endl;
cout<<"信息队列:";
for(i=0;i<l;i++)
cout<<m[0][i]<<' ';
cout<<endl<<" ack接收:";
for(i=0;i<l;i++)
cout<<m[1][i]<<' ';
cout<<endl<<endl<<"接收端如下↓"<<endl;
cout<<"信息队列:";
for(i=0;i<l;i++)
cout<<n[i]<<' ';
cout<<endl<<endl;
}
int tcp(char (*m)[30],char *n,int s,int l)
{
char ack[7]="123456";
int i,j,k;
j=i=0;
k=1;
cout<<"-------------------------------------------------------"<<endl;
cout<<"发送信息为:"<<m[0]<<endl;
cout<<"发送信息长度为:"<<l<<endl;
cout<<"发送窗口大小为:"<<s<<endl;
while(i<l){
for(;j<s && i<l;i++){
n[i]=m[0][i];
m[1][i] = ack[j++];
}
j=0;
cout<<"-------------------------------------------------------"<<endl;
cout<<"第"<<k<<"次传输结果:"<<endl;
print(m,n,s,l);
k++;
}
}
int main()
{
int l,s;
char m[2][30];
char n[30];
cout << "请输入发送端信息:" << endl;
cin>>m[0];
l=strlen(m[0]);
while(1){
cout << "请输入窗口大小(小于等于6):" << endl;
cin>>s;
if (s<=5)
break;
}
for(int j = 0;j<l;j++)
{
n[j]='\0';
m[1][j]='\0';
}
tcp(m,n,s,l);
return 0;
}
|