JAVA Socket编程
多人聊天室
客户端源代码
import java.awt.BorderLayout;
import java.awt.HeadlessException;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class ClientChatView extends JFrame{
private JTextArea ta = new JTextArea(10,20);
private JTextField tf = new JTextField(20);
private Socket cs = null;
private static final int PORT = 8888;
private static final String CONNSTR = "127.0.0.1";
private DataOutputStream dos = null;
private boolean isconn = false;
public ClientChatView() throws HeadlessException {
super();
}
public void init() {
this.setTitle("ClientView");
this.add(ta,BorderLayout.CENTER);
this.add(tf,BorderLayout.SOUTH);
this.setBounds(300, 300, 300, 400);
ta.setEditable(false);
tf.requestFocus();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
tf.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String strSend = tf.getText();
send(strSend);
if (strSend.trim().length()==0) {
return;
}
tf.setText("");
}
});
try {
cs = new Socket(CONNSTR,PORT);
isconn = true;
} catch (UnknownHostException e1) {
e1.printStackTrace();
} catch (IOException e1) {
e1.printStackTrace();
}
this.setVisible(true);
new Thread(new Receive()).start();
}
public void send(String str) {
try {
dos = new DataOutputStream(cs.getOutputStream());
dos.writeUTF(str);
} catch (IOException e) {
e.printStackTrace();
}
}
class Receive implements Runnable{
public void run() {
try {
while(isconn) {
DataInputStream dis = new DataInputStream(cs.getInputStream());
String str = dis.readUTF();
ta.append(str);
}
}catch (SocketException e3) {
System.out.println("Sever stopped");
ta.append("Server stopped");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
ClientChatView cc = new ClientChatView();
cc.init();
}
}
服务器端源代码
import java.awt.BorderLayout;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.ActionEvent;
public class ServerChat extends JFrame{
JTextArea serverTa = new JTextArea();
private JPanel btnTool = new JPanel();
private JButton starBtn = new JButton("start");
private JButton stopBtn = new JButton("stop");
private static final int PORT = 8888;
private ServerSocket ss = null;
private Socket s = null;
private boolean isStart = false;
private ArrayList<ClientConn> cclist=new ArrayList<ClientConn>();
public void init() {
this.setTitle("ServerView");
this.add(serverTa,BorderLayout.CENTER);
btnTool.add(starBtn);
btnTool.add(stopBtn);
this.add(btnTool,BorderLayout.SOUTH);
this.setBounds(0, 0, 500, 500);
serverTa.setEditable(false);
if(isStart) {
serverTa.append("Server started.\\n");
}else {
serverTa.append("Server not start."+"\n");
}
starBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
if(ss==null) {
ss=new ServerSocket(PORT);
}
isStart = true;
serverTa.append("Server started."+"\n");
}catch(IOException e1) {
e1.printStackTrace();
}
}
});
stopBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
isStart = false;
try {
if(s!=null) {
s.close();
}
if(ss!=null) {
ss.close();
}
serverTa.append("Server stopped");
System.exit(0);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
isStart = false;
try {
if(s!=null) {
s.close();
}
if(ss!=null) {
ss.close();
}
serverTa.append("Server stopped");
System.exit(0);
} catch (IOException e1) {
e1.printStackTrace();
}
}
});
this.setVisible(true);
startServer();
}
public void startServer() {
try {
try {
ss = new ServerSocket(PORT);
isStart = true;
} catch (IOException e) {
e.printStackTrace();
}
while (isStart) {
s = ss.accept