⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tt1.txt

📁 实现滑动窗口协议
💻 TXT
字号:
  import   java.awt.*;   
  import   java.awt.event.*;   
  import   javax.swing.*;   
  import   com.borland.jbcl.layout.*;   
  import   java.util.*;   
    
  public   class   Frame1   extends   JFrame{   
      private   JPanel   contentPane;   
      private   XYLayout   xYLayout1   =   new   XYLayout();   
      private   TextField   textField1   =   new   TextField();   
      private   TextField   textField2   =   new   TextField();   
      private   TextField   textField3   =   new   TextField();   
      private   Button   button1   =   new   Button();   
      private   Button   button2   =   new   Button();   
      private   Button   button3   =   new   Button();   
      private   Label   label1   =   new   Label();   
      private   Label   label2   =   new   Label();   
      private   Label   label3   =   new   Label();   
      int   send_flag=0;   
      int   receive_flag=0;   
      java.util.Timer   sendcol=new     java.util.Timer();   
      java.util.Timer   receivecol=new     java.util.Timer();   
      java.util.Timer   colflag=null;   
      String   ssend;   
      String   sreceive;   
      String   strin;   
      String   sbuffer="";   
      boolean   chose,chose1,answer;   
      //boolean   chosereceive=true;   
      //Construct   the   frame   
      public   Frame1()   {   
          enableEvents(AWTEvent.WINDOW_EVENT_MASK);   
          try   {   
              jbInit();   
          }   
          catch(Exception   e)   {   
              e.printStackTrace();   
          }   
      }   
      //Component   initialization   
      private   void   jbInit()   throws   Exception     {   
          //setIconImage(Toolkit.getDefaultToolkit().createImage(Frame1.class.getResource("[Your   Icon]")));   
          contentPane   =   (JPanel)   this.getContentPane();   
          textField1.setFont(new   java.awt.Font("Dialog",   0,   14));   
          textField1.setText("01234567");   
          contentPane.setLayout(xYLayout1);   
          this.setSize(new   Dimension(400,   300));   
          this.setTitle("滑动窗口");   
          textField2.setFont(new   java.awt.Font("Dialog",   0,   14));   
          textField2.addActionListener(new   java.awt.event.ActionListener()   {   
              public   void   actionPerformed(ActionEvent   e)   {   
                //   textField2_actionPerformed(e);   
              }   
          });   
          textField3.setFont(new   java.awt.Font("Dialog",   0,   14));   
          textField3.setText("76543210");   
          button1.setLabel("开始发送");   
          button1.addActionListener(new   java.awt.event.ActionListener()   {   
              public   void   actionPerformed(ActionEvent   e)   {   
                  button1_actionPerformed(e);   
              }   
          });   
          button2.setLabel("mistake");   
          button3.setLabel("开始接收");   
          button3.addActionListener(new   java.awt.event.ActionListener()   {   
              public   void   actionPerformed(ActionEvent   e)   {   
                  button3_actionPerformed(e);   
              }   
          });   
          label1.setText("发送端口");   
          label2.setText("缓冲区");   
          label3.setText("接收窗口");   
          contentPane.setFont(new   java.awt.Font("Dialog",   0,   14));   
          contentPane.add(button1,       new   XYConstraints(266,   54,   92,   22));   
          contentPane.add(textField3,   new   XYConstraints(66,   225,   121,   27));   
          contentPane.add(textField1,   new   XYConstraints(69,   60,   116,   26));   
          contentPane.add(label1,     new   XYConstraints(70,   33,   62,   16));   
          contentPane.add(label2,     new   XYConstraints(61,   116,   73,   19));   
          contentPane.add(label3,     new   XYConstraints(63,   193,   64,   20));   
          contentPane.add(button2,     new   XYConstraints(265,   104,   93,   24));   
          contentPane.add(button3,     new   XYConstraints(267,   165,   89,   24));   
          contentPane.add(textField2,   new   XYConstraints(65,   144,   120,   -1));   
      }   
      //Overridden   so   we   can   exit   when   window   is   closed   
      protected   void   processWindowEvent(WindowEvent   e)   {   
          super.processWindowEvent(e);   
          if   (e.getID()   ==   WindowEvent.WINDOW_CLOSING)   {   
              System.exit(0);   
          }   
      }   
    
      class   slide   extends   TimerTask{   
          public   void   run(){   
              int   i=0,j=0;   
              java.util.Random   rand=new   Random();   
              if(chose){//定时器sendcol,相当于按钮开始发送有效,开始发送   
              ssend=textField1.getText();   
              sbuffer+=ssend.valueOf(ssend.charAt(0));   
              strin+=ssend.valueOf(ssend.charAt(0));//存储未接收到应答的帧的序号   
              textField2.setText(sbuffer); //发送端输入到缓冲区   
              textField1.setText(ssend.substring(1));//删除发送了的帧序号   
              }   
    
              if(chose1){//定时器receivecol,相当于按钮开始接收有效,开始接收   
                  if(textField2.getText()!=null){//非空时,从缓冲区删除,同时也删除接收区的帧号,   
                                                                                          //表示接收区已接收到帧   
                    sreceive=textField3.getText();   
                    textField3.setText(sreceive.substring(0,sreceive.length()-2));   
                    //删除接收区的帧号   
                    textField2.setText(ssend.substring(1));   
                    //删除缓冲区的帧号   
                  }   
    
                  if(answer){//有应答信号所有的处理   
                      i=strin.length()-sbuffer.length();//除去缓冲区以外未应答的帧数   
                      while(j<i){//把缓冲区外未应答的帧号插回到发送区和接收区   
                      ssend+=strin.valueOf(strin.charAt(0));//插到发送区   
                      StringBuffer   sb=new   StringBuffer(sreceive);//插到接收区   
                      sb=sb.insert(0,strin.valueOf(strin.charAt(0)));   
                      sreceive=sb.toString();   
                      textField3.setText(sreceive);   
                      strin=strin.substring(1); //删除已插到发送区和接收区的帧号   
                      j++; //控制循环   
                      }   
                      j=0;   
                  }   
                  answer=false;   
                  if(rand.nextInt()%2==0){   
                      i=0;   
                      answer=true;   
                  }   
              }   
    
          }   
      }   
      slide   slide1=new   slide();   
    
      void   button1_actionPerformed(ActionEvent   e)   
      {   
          chose=true;   
          if(send_flag==0){//按钮转换,0时启动定时器,为正在发送。1时关闭定时器,为停止发送   
              sendcol.schedule(slide1,1000,1000); //启动定时器   
              //}   
              send_flag++;   
              button1.setLabel("停止发送");//按钮的显示转换   
          }   
          else{   
              sendcol.cancel(); //关闭定时器   
              send_flag--;   
    
              button1.setLabel("开始发送");   
          }   
      }   
    
      void   button3_actionPerformed(ActionEvent   e)   {   
            chose1=true;   
          if(receive_flag==0){//按钮转换,0时启动定时器,为正在接收。1时关闭定时器,为停止接收   
    
              receivecol.schedule(slide1,1000,1000);   
    
              receive_flag++;   
              button3.setLabel("停止接收");   
          }   
          else{   
    
              receivecol.cancel();   
              receive_flag--;   
              button3.setLabel("开始接收");   
          }   
      }   
    
  }   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -