📄 slidingwindowprotocol.java
字号:
//: c11:SlidingWindow.java
// ģʾЭ
//package classes;
import java.io.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
import javax.swing.border.*;
public class SlidingWindowProtocol extends JFrame
{
private int windowWidth = 800; // ڴС
private int windowHeight = 570;
private Console console; // ̨
private SendPanel sendPanel; // ʾ
private ChannelPanel channelPanel; // ͨŵ
private SinkPanel sinkPanel; // շ
private JPanel mainPanel; //
JPanel panel;
private int maxSeq; // ֡
private int sendSize; // ͷڴС
private int sinkSize; // շڴС
private ComChannel channel; // ͨŵ
private Sender sender; // ͽ
private Sink sink; // ս
public SlidingWindowProtocol()
{
super("Эģʾ");panel=new JPanel();
mainPanel= new JPanel();
//mainPanel = (JPanel)this.getContentPane(); //
mainPanel.setLayout(null);
mainPanel.setBackground(Color.white); // ñɫ
// ͷӵ
int sendX = 10; // ͷʾλúʹС
int sendY = 20;
int sendWidth = 250;
int sendHeight = 200;
sendPanel = new SendPanel(sendWidth,sendHeight); // ͷʾ
sendPanel.setBounds(sendX,sendY,sendWidth,sendHeight);
mainPanel.add(sendPanel);
// ͨŵӵ
int chanX = sendWidth; // ͨŵλúʹС
int chanY = sendY;
int chanWidth = windowWidth - 2*sendWidth - 20;
int chanHeight = sendHeight;
channelPanel = new ChannelPanel(chanWidth,chanHeight);
channelPanel.setBounds(chanX,chanY,chanWidth,chanHeight);
mainPanel.add(channelPanel);
// շӵ
int sinkX = sendWidth + chanWidth; // շʾλúʹС
int sinkY = sendY;
int sinkWidth = sendWidth;
int sinkHeight = sendHeight;
sinkPanel = new SinkPanel(sinkWidth,sinkHeight);
sinkPanel.setBounds(sinkX,sinkY,sinkWidth,sinkHeight);
mainPanel.add(sinkPanel);
// ̨ӵ
int conWidth = windowWidth - 18; // λúʹС
int conHeight = 100;
int conX = 5;
int conY = windowHeight - conHeight - 38;
console = new Console(); // ̨
console.setBackground(Color.cyan);
console.setBounds(conX,conY,conWidth,conHeight);
panel.add(BorderLayout.CENTER,console);
this.add(BorderLayout.CENTER,mainPanel);
this.add(BorderLayout.SOUTH,panel);
this.addWindowListener( // رմ¼
new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
maxSeq = 7; // ʼ֡Ϊ7
sendSize = maxSeq; // ĬϷͷڴС
sinkSize = 1; // ĬϽշڴС
this.setBounds(100,50,windowWidth,windowHeight);
this.setSize(windowWidth,windowHeight);
this.setVisible(true);
}
// ʾʼ
private void start()
{
if( channel==null)
{
channel = new ComChannel(channelPanel); // ʼͨŵ
if(channel.isUsable()==false)
{
System.out.println("ŵʧ");
}
else
{
channel.start();
if(sender==null)
{
sender = new Sender( // ʼ߳
channel,maxSeq,sendSize,sendPanel);
sender.start(); // ʼ
}
if(sink==null)
{
sink = new Sink( // ʼ߳
channel,maxSeq,sinkSize,sinkPanel);
sink.start(); // ʼ
}
}
}
}
// ͣʾ
private void pause()
{
if(sender!=null)
{
sender.pause();
}
if(sink!=null)
{
sink.pause();
}
}
// ʾ
private void continu()
{
if(sender!=null)
{
sender.continu();
}
if(sink!=null)
{
sink.continu();
}
}
// ֹͣʾ
private void stop()
{
if(sender!=null)
{
sender.close();
sender = null;
}
if(sink!=null)
{
sink.close();
sink = null;
}
if(channel!=null)
{
channel.close();
channel = null;
}
}
//
class Console extends JPanel
{
JButton start; // ʼͣ
JButton restart; // ¿ʼ
JButton stop; // ֹͣ
ButtonGroup policy;
JRadioButton goBackN; // N֡
JRadioButton select; // ѡط
Console()
{
start = new JButton("start");
restart = new JButton("restart");
stop = new JButton("stop");
ActionListener buttonAction =
new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
sendSize = maxSeq; // ʹڴС
sinkSize = 1; // մڴС
sendPanel.setWindowSize(sendSize);// ֪ͨͷ
sinkPanel.setWindowSize(sinkSize);// ֪ͨշ
if(e.getActionCommand().equals("start"))
{
start.setText("zantin");
restart.setEnabled(false);
stop.setEnabled(true);
start();
}
if(e.getActionCommand().equals("zanting"))
{
start.setText("start");
restart.setEnabled(false);
stop.setEnabled(false);
stop();
start();
}
if(e.getActionCommand().equals("zanting"))
{
start.setText("start");
restart.setEnabled(true);
stop.setEnabled(true);
pause();
}
if(e.getActionCommand().equals("restart"))
{
start.setText("start");
restart.setEnabled(false);
stop.setEnabled(true);
continu();
}
if(e.getActionCommand().equals("stop"))
{
start.setText("start");
restart.setEnabled(true);
stop.setEnabled(false);
stop();
}
}
};
start.addActionListener(buttonAction);
this.add(start);
restart.addActionListener(buttonAction);
restart.setEnabled(false);
this.add(restart);
stop.addActionListener(buttonAction);
stop.setEnabled(false);
this.add(stop);
this.setBackground(Color.white);
this.setBorder(new TitledBorder("̨"));
}
}
public static void main(String[] args)
{
new SlidingWindowProtocol();
}
}///:~
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -