package day15.homework;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
import javax.swing.*;
public class QQServer implements ActionListener{
private static final long serialVersionUID = 1L;
private Socket so;
private ServerSocket ss;
private static String word="";
private int count=0;//记录登录人数
private String welcome="";
private JComboBox jcbb;
private JList jli;
private JMenuItem jmis;
private String names="";
private JTextArea jta;
public QQServer(){
JFrame jf=new JFrame("QQ服务器");
JMenuBar jmb=new JMenuBar();
JMenu jm=new JMenu("start");
jcbb=new JComboBox();
jta=new JTextArea();
jta.setLineWrap(true);
jta.setEditable(false);
jli=new JList();
JScrollPane jscpr=new JScrollPane(jta);
JScrollPane jscp=new JScrollPane(jli);
JPanel jp=new JPanel(new BorderLayout());
jp.add(jcbb,BorderLayout.NORTH);
jp.add(jscp,BorderLayout.CENTER);
jmis=new JMenuItem("start");
JMenuItem jmie=new JMenuItem("exit");
jmis.addActionListener(this);
jmie.addActionListener(this);
JSplitPane jsp=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT);
jsp.setDividerLocation(150);
jsp.setOneTouchExpandable(true);
jsp.setLeftComponent(jp);
jsp.setRightComponent(jscpr);
jm.add(jmis);
jm.add(jmie);
jmb.add(jm);
jf.setJMenuBar(jmb);
jf.add(jsp);
jf.setLocation(300, 100);
jf.setSize(500, 400);
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}
public static void main(String[] args) throws Exception {
new QQServer();
}
private class ServerThread extends Thread{//负责等待客户端连接的线程
public void run(){
try{
ss=new ServerSocket(7456);//创建服务器端套接字接口
while(true){
so=ss.accept();//这里阻塞,直到客户端连接上
System.out.println("start");
new ClientThread().start();
}
}catch(Exception e1){
System.out.println("s1");
e1.printStackTrace();
}
}
}
private class ClientThread extends Thread{//负责与客户端交互的线程
public void run(){
int i=0;
count++;
String talk = null;
try{
InputStreamReader isr=new InputStreamReader(so.getInputStream());
BufferedReader br=new BufferedReader(isr);
PrintStream ps=new PrintStream(so.getOutputStream());//服务器端写
while(true){
talk=br.readLine();//服务器端先读
if(talk==null){
//break;
//if(talk.indexOf("%")!=-1){///////////////
//jta.setText(jta.getText()+"\n"+talk.subSequence(0, talk.length()-1)+"已离开了聊天室,欢迎再来!");
count--;
br.close();
ps.close();
so.close();
break;
}
if("*".equals(talk)){
ps.println(word);
}else{
String[] name=talk.split("说");
welcome=name[0];
if(i==0){
String[] data =names.split(";");
names=welcome+";"+names;
jli.setListData(data);
jcbb.addItem(welcome);
word=word+"欢迎"+welcome+"进入聊天室!当前"+count/2+"人在线.\u0001"+talk;
i=4;
}else
word=word+"\u0001"+talk;//\u0001是个笑脸,linux里不显示
System.out.println(talk);
ps.println(word);//再写.print不行,没有换行
}
}
}catch(Exception e){
System.out.println("s2");//////////
jta.setText(jta.getText()+"\n"+welcome+talk.subSequence(0, talk.length()-1)+"已离开了聊天室,欢迎再来!");
//e.printStackTrace();
}
System.out.println("Client is end");
}
}
public void actionPerformed(ActionEvent e) {
String comm=e.getActionCommand();
if("start".equals(comm)){
jmis.setEnabled(false);
new ServerThread().start();
}
if("exit".equals(comm)){
System.exit(0);
}
}
}