import java.awt.*; import java.awt.event.*; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.Socket; import java.net.SocketException; import java.net.UnknownHostException; public class ChatClient extends Frame { Socket s = null; DataOutputStream dos = null; DataInputStream dis = null; private boolean bConnected = false; TextField tfTxt = new TextField(); TextArea taContent = new TextArea(); Thread tRecv = new Thread(new RecvThread()); public static void main(String[] args) { new ChatClient().launchFrame(); } public void launchFrame() { this.setLocation(400, 300); this.setSize(300, 300); this.add(tfTxt, BorderLayout.SOUTH); this.add(taContent, BorderLayout.NORTH); pack(); this.addWindowListener(new WindowAdapter(){ //添加窗口事件的响应 public void windowClosing(WindowEvent arg0) { disconnect(); System.exit(0); } }); tfTxt.addActionListener(new TFListener()); //添加事件的监听 this.setVisible(true); connect(); tRecv.start(); } public void connect() { try { s = new Socket("127.0.0.1", 8888); dos = new DataOutputStream(s.getOutputStream()); dis = new DataInputStream(s.getInputStream()); System.out.println("look for server"); bConnected = true; } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public void disconnect() { try { dos.close(); dis.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } /* try { bConnected = false; tRecv.join(); }catch(InterruptedException e) { e.printStackTrace(); }finally { try { dos.close(); dis.close(); s.close(); } catch (IOException e) { e.printStackTrace(); } } */ } private class TFListener implements ActionListener { public void actionPerformed(ActionEvent arg0) { String str = tfTxt.getText().trim(); //taContent.setText(str); tfTxt.setText(""); try { dos.writeUTF(str); dos.flush(); } catch (IOException e) { e.printStackTrace(); } } } private class RecvThread implements Runnable { public void run() { try { while(bConnected) { String str = dis.readUTF(); System.out.println(str); taContent.setText(taContent.getText() + str + '/n'); } }catch(SocketException e) { System.out.println("Bye bye"); } catch (IOException e) { e.printStackTrace(); } } } }