import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Vector;
import java.util.concurrent.SynchronousQueue;
import javax.lang.model.SourceVersion;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import java.awt.TextArea;
import javax.swing.JTextField;
public class ChactServer extends JFrame implements ActionListener {
private JLabel jLabel1;
private JTextField jTextField1;
private JLabel jLabel2;
private JComboBox jComboBox1;
private JButton jButton1;
private JButton jButton2;
private JLabel jLabel3;
private TextArea jTextArea1;
private JLabel jLabel4;
private TextArea jTextArea2;
private JButton jButton3;
private Vector<Socket> vSocket = new Vector<Socket>();
private static int i = 0;
public ChactServer() {
Container c = this.getContentPane();
jLabel1 = new JLabel("端口号:");
jTextField1 = new JTextField("1234", 20);
jLabel2 = new JLabel("客户机:");
jComboBox1 = new JComboBox();
jComboBox1.addItem(" -目前没有客户机与之相连选 。- ");
jComboBox1.setSize(1510, 2100);
jButton1 = new JButton("-- 启动服务器! --");
jButton1.addActionListener(this);
jButton2 = new JButton("-- 关闭服务器! --");
jLabel3 = new JLabel("通话记录:");
jTextArea1 = new TextArea(50,50);
jTextArea1.setColumns(25);
jTextArea1.setRows(10);
jTextArea1.setBackground(Color.PINK);
jLabel4 = new JLabel("发送消息:");
jTextArea2 = new TextArea();
jTextArea2.setColumns(25);
jTextArea2.setRows(5);
jTextArea2.setBackground(Color.LIGHT_GRAY);
jButton3 = new JButton("-- 发送消息 --");
jButton3.addActionListener(this);
c.setLayout(new FlowLayout(FlowLayout.LEFT));
c.add(jLabel1);
c.add(jTextField1);
c.add(jLabel2);
c.add(jComboBox1);
c.add(jButton1);
c.add(jButton2);
c.add(jLabel3);
c.add(jTextArea1);
c.add(jLabel4);
c.add(jTextArea2);
c.add(jButton3);
this.setTitle("聊天室--服务器");
this.setBounds(20, 30, 290, 490);
this.setResizable(false);
this.setVisible(true);
}
class StartServer extends Thread {
private int port;
private ServerSocket serverSocket;
public StartServer(int port) throws IOException {
super();
this.port = port;
this.serverSocket = new ServerSocket(port);
}
public void run() {
while (true) {
try {
Socket socket = serverSocket.accept();
vSocket.add(socket);
++i;
jComboBox1.addItem("客户端" + i + socket.getInetAddress());
jTextArea1.append("客户端已经连接!\n");
new Receive(socket).start();
} catch (IOException e) {
// TODO Auto-generated catch block
JOptionPane.showMessageDialog(null, "服务器启动异常,可能是端口被占用!");
}
}
}
}
class Receive extends Thread {
private Socket socket;
public Receive(Socket socket) {
super();
this.socket = socket;
}
public void run() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(
this.socket.getInputStream()));
while (true) {
// System.out.println(br.readLine());
String s = "客户端" + socket.getInetAddress() + "说"
+ br.readLine() + "\n";
// System.out.println(s);
jTextArea1.append(s);
}
} catch (IOException e) {
// TODO Auto-generated catch block
// e.printStackTrace();
JOptionPane.showMessageDialog(null, "请检查客户端的连接!");
}
}
}
class Send extends Thread {
private Socket socket;
public Send(Socket socket) {
this.socket = socket;
}
public void run() {
try {
PrintWriter pw = new PrintWriter(socket.getOutputStream());
String s = jTextArea2.getText();
pw.println(s);
pw.flush();
jTextArea2.setText("");
jTextArea1.append("我说:" + s + "\n");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
public static void main(String[] args) {
try {
new ChactServer();
} catch (Exception e) {
JOptionPane.showMessageDialog(null, "端口可能被占用");
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == jButton1) {
int port = Integer.parseInt(jTextField1.getText().trim());
System.out.println(port);
try {
new StartServer(port).start();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
if (e.getSource() == jButton3) {
try {
int select = jComboBox1.getSelectedIndex();
System.out.println(select);
Socket s = (Socket) (vSocket.get(select - 1));
new Send(s).start();
} catch (Exception edd) {
JOptionPane.showMessageDialog(null, "没有选择要通信的客户端!");
}
}
}
}