• 大小: 5KB
    文件类型: .cpp
    金币: 1
    下载: 0 次
    发布日期: 2021-06-11
  • 语言: C/C++
  • 标签: C语言  

资源简介

能输入窗口大小,传输的第一个字节号,能实现滑动窗口的动态滑动过程,发送方发送字节,接收方将按顺序接受的字节直接交给上层程序,错序的字节先储存在链表中,等到它之前的字节顺序到达后再一起交给上层程序。之后发送窗口向前移动。。。

资源截图

代码片段和文件信息

#include
#include
#include
main()
{
struct swphdr
{
unsigned long  seqnum;
unsigned long  acknum;
unsigned short flags; /*flag=0表示这是一个数据帧,flag=1表示这是一个ACK帧*/
};
struct sendq_slot 
{
unsigned short timeout;/*1时表示计时启动,0时表示已收到确认*/
unsigned long  msg;
struct sendq_slot *next;
};
    struct recvq_slot 
{
unsigned short received;/*1表示顺序接收,0表示错序接受*/
unsigned long  msg;
struct recvq_slot *next;
};
struct swpstate
{
unsigned long  lar;
unsigned long  lfs;
unsigned long sws;
struct swphdr  hdr;
unsigned long rws;
struct sendq_slot *sendq;
unsigned long  nfe;
struct recvq_slot *head;
}swpstate1;
unsigned long a;
int flagb;
/*发送*/
struct sendq_slot *sendq_rear*sendp*p3*p4;
struct recvq_slot *recvp*recvq_rear*p1*p2;
swpstate1.head=NULL;
swpstate1.sendq=sendq_rear=(struct sendq_slot*)malloc(sizeof(struct sendq_slot));
    if(!swpstate1.sendq) exit(1);
    sendq_rear->next=NULL;
printf(“请输入窗口大小:“);
scanf(“%ld“&swpstate1.sws);
swpstate1.rws=swpstate1.sws;
if (swpstate1.sws>0)
{
  printf(“请输入第一帧的序列号:“);
  scanf(“%ld“&swpstate1.hdr.seqnum);
}
swpstate1.nfe=swpstate1.hdr.seqnum;
sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot));
if(!sendp) exit(1);
sendp->msg=swpstate1.hdr.seqnum;
sendp->timeout=1;
sendp->next=NULL;
sendq_rear->next=sendp;
sendq_rear=sendp;
--swpstate1.sws;
swpstate1.lfs=swpstate1.hdr.seqnum;
swpstate1.lar=swpstate1.hdr.seqnum;
do
{
while(swpstate1.sws>0)
{
sendp=(struct sendq_slot*)malloc(sizeof(struct sendq_slot));
        if(!sendp) exit(1);
        sendp->msg=swpstate1.lfs+1;
        sendp->timeout=1;
        sendp->next=NULL;
        sendq_rear->next=sendp;
        sendq_rear=sendp;
        --swpstate1.sws;
        ++swpstate1.lfs;
}
    swpstate1.hdr.acknum=0;
    swpstate1.hdr.flags=0;
printf(“最近收到的ACK的帧序号:%ld\n“swpstate1.lar);
printf(“最近发送的帧序号(发送新帧后):%ld\n“swpstate1.lfs);
/*接收*/

   if(swpstate1.hdr.flags==0)
   {
   
   do
   {
      printf(“请输入收到的数据帧号:“);
      scanf(“%ld“&a);
  if(a>=swpstate1.nfe&&a<=swpstate1.lfs)
  {
  if(swpstate1.head==NULL)
  {

评论

共有 条评论