源代码
package com.lgf.client;
import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
/**
*
* @author 11281009 李高锋
* com.lgf.client
* Start.java
* 2013-11-16下午1:55:14
*/
public class ClientMainWindow extends JFrame implements ActionListener{
/**
*
*/
private static final long serialVersionUID = -7488994958453903490L;
private JTextArea textArea;
private JButton startButton;
private JButton stopButton;
SendThread st;
public ClientMainWindow() throws HeadlessException {
initUI();
this.appendMessage("发送端启动!");
}
private void initUI(){
this.setLayout(new BorderLayout());
textArea = new JTextArea();
textArea.setEditable(false);
startButton = new JButton("开始");
stopButton = new JButton("停止");
JPanel south = new JPanel();
south.setLayout(new GridLayout(1, 2, 5, 5));
south.add(startButton);
south.add(stopButton);
startButton.addActionListener(this);
stopButton.addActionListener(this);
this.add(new JScrollPane(textArea), "Center");
this.add(south, "South");
this.setSize(600, 450);
this.setTitle("GBN-Client");
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setVisible(true);
}
public void appendMessage(String message){
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS");
textArea.append(sdf.format(new Date()) + " " + message + "\n");
textArea.setCaretPosition(textArea.getDocument().getLength());
}
public static void main(String []args){
new ClientMainWindow();
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == startButton){
st = new SendThread(this);
st.start();
}else if(e.getSource() == stopButton){
if(st != null){
st.forceStop();
}
}
}
}
package com.lgf.client;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.ArrayList;
import javax.swing.Timer;
import com.lgf.common.C;
import com.lgf.common.Md5;
import com.lgf.common.Packet;
public class SendThread extends Thread{
private ClientMainWindow mw;
public static final int PACKET_AMOUNT = 15;
public String allData[];
private int nextSendNum = 0;
private ArrayList<Packet> sndpkt;
private int N = 5;
private int base;
private int nextSeqNum;
private Socket socket;
// private ObjectOutputStream oos = null;
// private ObjectInputStream ois = null;
private boolean forceStop;
private boolean working;
private Timer timer;
public SendThread(ClientMainWindow mw){
this.mw = mw;
initAllData();
sndpkt = new ArrayList<>();
boolean exception = false;