packagemultiThreadChatSocketServer;import java.awt.*;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.IOException;importjava.net.ServerSocket;importjava.net.Socket;public classSocketServer {privateTextArea ta;privateTextField tf;privateServerSocket ss;privateSocket s;privateDataInputStream dis;privateDataOutputStream dos;publicTextField getTextField() {returntf;
}publicTextArea getTextArea() {returnta;
}publicDataInputStream getDataInputStream() {returndis;
}publicDataOutputStream getDataOutputStream() {returndos;
}public static voidmain(String[] args) {
SocketServer socketServer= newSocketServer();
socketServer.createUI();
socketServer.connect();
socketServer.createThread();
}public voidclose() {try{
dis.close();
dos.close();
s.close();
ss.close();
}catch(IOException e) {
e.printStackTrace();
}
}/*** 创建界面*/
private voidcreateUI(){
Frame f=new Frame("socketServer");
ta= newTextArea();
tf= newTextField();
Button send= new Button("send");
Panel p= newPanel();
p.setLayout(newBorderLayout());
p.add(tf,"Center");
p.add(send,"East");
f.add(ta,"Center");
f.add(p,"South");
MyServerListener listener= new MyServerListener(this);//不管点击发送按钮还是输入框回车,都会触发listener事件
send.addActionListener(listener);
tf.addActionListener(listener);//当关闭窗口的时候,退出系统
f.addWindowListener(newWindowAdapter() {public voidwindowClosing(WindowEvent e) {
System.exit(0);
}
});
f.setSize(400,400);
f.setVisible(true);
}/*** 创建连接*/
public voidconnect(){try{
ss=new ServerSocket(8888);
s=ss.accept();
dis=newDataInputStream(s.getInputStream());
dos=newDataOutputStream(s.getOutputStream());
}catch(IOException e) {//TODO Auto-generated catch block
e.printStackTrace();
}
}/*** 启动监听客户端发来的消息的线程*/
public voidcreateThread() {
MyServerReader reader= new MyServerReader(this);
reader.start();
}
}