📄 chatserver.java
字号:
package net;
import java.io.*;
import java.net.*;
import java.util.*;
public class ChatServer {
public static void main(String[] args) throws Exception{
ServerSocket ss=new ServerSocket(9000);
Map m=new HashMap();
List onlinel=new LinkedList(); //在线用户
BufferedReader in;
while(true){ //侦听
Socket s=ss.accept();
try {
in=new BufferedReader(new InputStreamReader(s.getInputStream()));
String name=in.readLine(); //读到上线用户的姓名
onlinel.add(name); //加到在线用户的链表中
m.put(name,s); //用户姓名为key,其socket为value
Thread t=new ChatThread(s,m,onlinel,name,in);
t.start();
} catch (IOException e) {
}
}
}
}
class ChatThread extends Thread{
private Socket s;
private Map m;
private List l;
private String name;
private BufferedReader in;
private PrintWriter out;
private Set keys;
public ChatThread(Socket s,Map m,List l,String name,BufferedReader in){
this.s=s;
this.m=m;
this.name=name;
this.in=in;
this.l=l;
keys=m.keySet(); //map的key集合
}
public void run(){
//上线用户给所有的在线用户发他的姓名,以加入到各在线用户的下拉列表中
Iterator it1=keys.iterator();
while(it1.hasNext()){
Object key=it1.next();
Socket so=(Socket)m.get(key); //得到各在线用户的socket
try {
PrintWriter pw=new PrintWriter(so.getOutputStream());
Iterator it2=l.iterator();
while(it2.hasNext()){
String online=(String)it2.next();
if(online.equals(name)){
pw.println("comIng"+name);
pw.flush();
}
else {
pw.println("JComboBox"+online); //加JComboBox标识是姓名
pw.flush();
}
}
}catch(Exception e){
}
}
while(true){
try {
String who=in.readLine(); //要发给谁
String str=in.readLine(); //消息内容
if(who==null||str==null) break;
if(m.containsKey(who)){ //map m中包含此姓名
Socket so=(Socket)m.get(who); //得到此人的socket
out=new PrintWriter(so.getOutputStream());
out.println(name+"说:"+str); //转发
out.flush();
}
else{ //发给所有人
Iterator it3=keys.iterator();
while(it3.hasNext()){
Object key=it3.next();
Socket so=(Socket)m.get(key);
out=new PrintWriter(so.getOutputStream());
out.println(name+"说:"+str);
out.flush();
}
}
} catch (IOException e) {
}
}
l.remove(name); //此用户下线,名字链表中删除此名字
m.remove(name); //m中删除
//此用户下线,发给其它在线用户的下线消息,并从下拉列表中删除其姓名
Iterator it4=keys.iterator();
while(it4.hasNext()){
Object key=it4.next();
Socket so=(Socket)m.get(key);
try {
out=new PrintWriter(so.getOutputStream());
} catch (IOException e1) {
}
out.println(name+"退出聊天室");
out.println("removeItem"+name);
out.flush();
try {
s.close();
} catch (IOException e) {
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -