客户端代码
package net.java2000.project.chat;
import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
/**
*
* @author 老紫竹 www.java2000.net
*
*/
class ChatClient extends Frame {
private static final long serialVersionUID = -6290371526617318074L;
public static void main(String[] args) {
new ChatClient("chat");
}
Button b = new Button("send");
Socket s = null;
DataOutputStream dos = null;
TextField tf = new TextField();
TextArea ta = new TextArea();
DataInputStream dis = null;
boolean bconnected = false;
ChatClient(String s) {
super(s);
setLocation(400, 300);
setVisible(true);
setSize(300, 300);
setLayout(new BorderLayout());
add("East", b);
Monitor1 monitor = new Monitor1();
b.addActionListener(monitor);
tf.addKeyListener(monitor);
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
setVisible(false);
disconnected();
System.exit(0);
}
});
add("South", tf);
add("North", ta);
pack();
connect();
new Thread(new RecvThread()).start();
}
public void connect() {
try {
s = new Socket("127.0.0.1", 7000);
dos = new DataOutputStream(s.getOutputStream());
dis = new DataInputStream(s.getInputStream());
System.out.println("connected");
bconnected = true;
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void disconnected() {
try {
dos.close();
} catch (IOException e) {
e.printStackTrace();
}
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
class Monitor1 extends KeyAdapter implements ActionListener, KeyListener {
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_ENTER) {
doSend();
}
}
public void actionPerformed(ActionEvent e) {
if (e.getSource() == b) {
doSend();
}
}
private void doSend() {
if (bconnected) {
String str = tf.getText().trim();
if (str.length() == 0) {
return;
}
tf.setText("");
try {
dos.writeUTF(str);
dos.flush();
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
private class RecvThread implements Runnable {
public void run() {
try {
while (bconnected) {
String str = dis.readUTF();
ta.append(str + "\n");
}
} catch (java.net.SocketException ex) {
bconnected = false;
} catch (IOException e) {
e.printStackTrace();
}
}
}
}