📄 gbnclient.java
字号:
import java.awt.*;
import java.awt.event.*;
import java.util.Timer;
import java.util.TimerTask;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.*;
public class GBNClient implements Runnable{
Thread thread;
boolean tag1 = true,tag2 = true;
int bufferNum;
int winSizeNum;
int base = 1;
int nextseqnum = 1;
byte[] sendData;
byte[] receiveData;
DatagramPacket sendpacket;
InetAddress IPAddress;
int i;
DatagramSocket clientSocket;
Frame frame = new Frame("GBN网络实验客户端BY ddl");
Timer time,time1;
Button sendButton = new Button("发送"),
stopButton = new Button("暂停");
JLabel winSizeLabel = new JLabel("输入窗口大小:"),
sendLabel = new JLabel(" 数据发送 "),
ackLabel = new JLabel(" 收到确认 "),
TitleLabel = new JLabel("||GBN网络实验客户端|| "),
nameLabel = new JLabel(" 学生 : 都大龙 04281062 王宇航 04281083 ");
JTextField winSizeField = new JTextField(9);
TextArea sendArea = new TextArea("",10,25,TextArea.SCROLLBARS_VERTICAL_ONLY),
ackArea = new TextArea("",10,25,TextArea.SCROLLBARS_VERTICAL_ONLY);
public GBNClient(){
thread= new Thread(this);
try {
clientSocket = new DatagramSocket(9876);
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
frame.setLayout(new FlowLayout());
frame.add(TitleLabel);
frame.add(winSizeLabel);
frame.add(winSizeField);
frame.add(sendLabel);
frame.add(ackLabel);
frame.add(sendArea);
frame.add(ackArea);
frame.add(sendButton);
sendButton.addActionListener(new Post());
frame.add(stopButton);
stopButton.addActionListener(new Stop());
frame.add(nameLabel);
sendArea.setEditable(false);
ackArea.setEditable(false);
frame.addWindowListener(new Close());
frame.setLocation(250,250);
frame.setSize(420,320);
frame.setResizable(false);
frame.setVisible(true);
}
class Post implements ActionListener {
public void actionPerformed(ActionEvent e){
// TODO Auto-generated method stub
int winSizeNum = Integer.parseInt(winSizeField.getText());
try {
DatagramPacket sendpacket = null;
sendData = new byte[5];
if(nextseqnum < base +winSizeNum){
String sentence = ""+nextseqnum;
sendArea.append(sentence);
sendArea.append("\n");
sendData = sentence.getBytes();
sendpacket = new DatagramPacket(sendData,sendData.length,InetAddress.getByName("localhost"),6789);
String sentence11 = new String(sendpacket.getData());
if(tag2){
clientSocket.send(sendpacket);
}
if(base == nextseqnum){
time = new Timer();
time.schedule(new task(),2000);
}
nextseqnum++;
}
else sendArea.append("窗口已满\n");
}catch (SocketException e1) {
// TODO Auto-generated catch block
System.out.println("dfasfds");
e1.printStackTrace();
}catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
}
}
class Stop implements ActionListener {
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
tag2 = !tag2;
}
}
class Close extends WindowAdapter {
public void windowClosing(WindowEvent e) {
// TODO Auto-generated method stub
frame.dispose();
System.exit(0);
}
}
public static void main(String[] arg){
GBNClient GBN = new GBNClient();
GBN.thread.start();
}
public void run() {
// TODO Auto-generated method stub
char[] data = new char[5];
String data1 = "";
while(true){
receiveData = new byte[5];
DatagramPacket receivePacket = new DatagramPacket(receiveData,receiveData.length);
try {
clientSocket.receive(receivePacket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String receiveData1 = new String(receivePacket.getData());
receiveData1.getChars(0,4,data,0);
for(int i = 0;i < 5; i++){
if(data[i] == '0'||data[i]== '1'||data[i]=='2'||data[i]=='3'||data[i]=='4'||data[i]=='5'||data[i]=='6'||data[i]=='7'||data[i]=='8'||data[i]=='9') data1 = data1+data[i];
}
ackArea.append(receiveData1);
ackArea.append("\n");
int receiveData2 = Integer.parseInt(data1);
data1 = "";
base = receiveData2 +1;
if(base == nextseqnum)
time.cancel();
else{
time = new Timer();
time.schedule(new task(),2000);
}
}
}
class task extends TimerTask {
public void run() {
// TODO Auto-generated method stub
time = new Timer();
time.schedule(new task(),2000);
for(int i =base;i < nextseqnum;i++){
String sentence = ""+i;
//System.out.println(sentence);
sendArea.append(sentence);
sendArea.append("\n");
sendData = sentence.getBytes();
try {
sendpacket = new DatagramPacket(sendData,sendData.length,InetAddress.getByName("localhost"),6789);
} catch (UnknownHostException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
try {
clientSocket.send(sendpacket);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -