📄 chatserver.java
字号:
package exec.day1023;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer extends JFrame{
private JTextArea ta;
private Hashtable pw_ht;
private JList name_list;
private Vector name_vector;
public void init(){
setTitle("服务器端");
ta = new JTextArea();
pw_ht = new Hashtable(30);
name_list = new JList();
name_vector = new Vector();
name_vector.add("Name List:");
name_list.setListData(name_vector);
add(ta);
add(name_list,"West");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(500,400);
setVisible(true);
}
public ChatServer(){
this.init();
try{
ServerSocket server = new ServerSocket(6666);
while(true){
Socket socket = server.accept();
ServerThread each = new ServerThread(socket);
each.start();
}
}catch(Exception e){
e.printStackTrace();
}
}
/**
* 每个线程对象的socket属性对应了一个客户端,
* 通过该socket进行的只能是和该客户端的通讯
*/
class ServerThread extends Thread{
Socket socket;
public ServerThread(Socket socket){
this.socket = socket;
}
public void run(){
try{
ObjectOutputStream pw = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream br = new ObjectInputStream(socket.getInputStream());
String name = (String)br.readObject();
/**
* 将每个线程使用的pw存入到集合中
* 用于向每个用户发送聊天信息
*/
pw_ht.put(name,pw);
//将刚连接的用户姓名加在列表中
name_vector.add(name);
name_list.setListData(name_vector);
//给所有的客户端发送最新的存放用户姓名的name_vector
Collection all_pw = pw_ht.values();
for(Object key:all_pw){
ObjectOutputStream oos = (ObjectOutputStream)key;
oos.writeObject(name_vector);
oos.reset();
}
while(true) {
Object o = br.readObject();
Info result = (Info)o;
String dest = result.getDest();
String data = result.getData();
String oldData = data;
if(dest.equals("all")){
if(data!=null && data.equals("quit!")){
data = "系统管理员:"+name+"离开!";
pw_ht.remove(name);
//将用户从列表中删除
name_vector.remove(name);
name_list.setListData(name_vector);
pw.writeObject("q");
pw.flush();
pw.reset();
}else{
data = name+" say: " + data;
}
ta.append(data+"\n");
//给所有的客户端发送聊天信息
Collection all_pw1 = pw_ht.values();
for(Object key:all_pw1){
ObjectOutputStream oos1 = (ObjectOutputStream)key;
oos1.writeObject(data);
oos1.writeObject(name_vector);
oos1.reset();
}
if(oldData!=null && oldData.equals("quit!")){
return;
}
}else{
data = name + " say to " + dest + " : " + data;
ta.append(data+"\n");
ObjectOutputStream oos_dest = (ObjectOutputStream)pw_ht.get(dest);
oos_dest.writeObject(data);
pw.writeObject(data);
oos_dest.reset();
pw.reset();
}
}
}catch(Exception e){
e.printStackTrace();
}
}
}
public static void main(String[] args){
new ChatServer();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -