📄 chatserverthread.java
字号:
import java.net.*;
import java.io.*;
import java.util.*;
//***ChatServerThread 努贰胶 汲拌(立加阑 拌加 蜡瘤窍搁辑 单捞磐 价荐脚 窍扁 困秦辑 荤侩)*****
class ChatServerThread implements Runnable{
Socket child; //努扼捞攫飘客 烹脚窍扁 困茄 家南
ObjectInputStream ois; //努扼捞攫飘肺何磐 单捞磐甫 荐脚罐扁 困茄 胶飘覆
ObjectOutputStream oos;//努扼捞攫飘俊霸 单捞磐甫 价脚窍扁 困茄 胶飘覆
//++货酚霸 眠啊等 函荐++++++++++++++++++++++++
String user_id;//立加磊狼 酒捞叼甫 历厘且 函荐 急攫
HashMap<String, ObjectOutputStream> hm; //胶饭靛 埃狼 沥焊甫 傍蜡且 HashMap
//? 积己磊 : 涝免仿 胶飘覆阑 掘澜, 酒捞叼客 免仿 胶飘覆阑 秦浆 甘俊 殿废+++++++++++
//ChatServerThread 积己磊肺 立加 夸没茄 家南 按眉客 秦浆 甘捞 傈崔等促.
public ChatServerThread(Socket s, HashMap hm){
child=s; //努扼捞攫飘客 烹脚且 荐 乐绰 家南 沥焊甫 child俊 历厘窃
this.hm=hm;
try{
//努扼捞攫飘肺何磐 酒捞乔 林家甫 掘绢 免仿窃
System.out.println(child.getInetAddress()+"肺何磐 楷搬夸没 罐澜");
//努扼捞攫飘肺何磐 单捞磐甫 荐脚罐扁 困秦 努扼捞攫飘肺何磐 涝仿 胶飘覆阑 掘绢
ois = new ObjectInputStream(child.getInputStream()); //ObjectInputStream栏肺 函券
//努扼捞攫飘肺 单捞磐甫 价脚窍扁 困秦辑 免仿 胶飘覆 掘绢 ObjectOutputStream栏肺 函券
oos = new ObjectOutputStream(child.getOutputStream());
//++++酒捞叼甫 掘绢客 酒捞叼客 免仿 胶飘覆阑 秦浆 甘俊 殿废+++++++++++
//货肺款 努扼捞攫飘啊 立加秦辑 贸澜 焊辰 巩磊啊 酒捞叼捞骨肺 捞甫 掘绢 客辑
user_id = (String)ois.readObject();
//捞固 辑滚俊 立加登绢 乐绰 葛电 努扼捞攫飘俊霸 XXX啊 立加登菌促绰 皋矫瘤 傈价
broadcast(user_id + "丛捞 立加窍继嚼聪促.");
System.out.println("立加茄 努扼捞攫飘狼 酒捞叼绰 "+ user_id + "涝聪促.");
//咯矾 努扼捞攫飘俊霸 傍蜡登绰 秦浆 甘阑 悼扁拳矫糯
synchronized(hm){
//秦浆甘俊 荤侩磊狼 酒捞叼甫 key肺 免仿 胶飘覆阑 value肺 历厘窃
//葛电 努扼捞攫飘俊 狼秦 傍蜡登绢 皋矫瘤甫 宏肺靛 某胶泼阑 困秦 免仿 胶飘覆阑 秦浆 甘俊 历厘
hm.put(this.user_id, oos);
}
}catch(ClassNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}//积己磊 场
//? 努扼捞攫飘肺何磐 荐脚 罐篮 单捞磐甫 努扼捞攫飘俊霸 价脚茄促.+++++++++++
public void run(){
String receiveData; //努扼捞攫飘肺何磐 荐脚 罐篮 单捞磐甫 历厘窍扁 困茄 函荐
try{
while(true){
//+++努扼捞攫飘肺何磐 焊郴柳 皋矫瘤甫 荐脚茄促.++++++++++++
receiveData = (String)ois.readObject(); //涝仿 胶飘覆阑 烹秦 努扼捞攫飘啊 焊辰 皋矫瘤甫 佬绢咳
//努扼捞攫飘肺何磐 辆丰 皋矫瘤啊 甸绢坷搁 馆汗 巩阑 哈绢唱辑 finally 备巩栏肺 埃促.
if(receiveData.equals("/quit"))
break;
//庇加富阑 困秦辑 漂沥 努扼捞攫飘俊霸 皋矫瘤甫 焊陈促搁 sendMag甫 龋免茄促.
else if(receiveData.equals("/to"))
sendMsg(receiveData);
else //罐篮 皋矫瘤甫 葛电 努扼捞攫飘俊霸 宏肺靛 某胶泼茄促.
broadcast(user_id + " : " + receiveData);
}// while
}catch(Exception e){
System.out.println("努扼捞攫飘啊 碍力 辆丰");
}//catch
finally{ // 努扼捞攫飘肺何磐 "/quit" 扼绰 辆丰 皋矫瘤啊 焊郴瘤搁
synchronized(hm){
hm.remove(user_id);//辆丰 皋矫瘤 皋矫瘤甫 焊辰 努扼捞攫飘狼 沥焊甫 秦浆 甘俊辑 昏力茄 饶
}
broadcast(user_id + "丛捞 唱啊继嚼聪促." ); //唱赣瘤 努扼捞攫飘俊霸 立加 辆丰甫 舅覆
System.out.println(user_id + "丛捞 唱啊继嚼聪促."); //辑滚俊档 免仿
try{
if(child != null)
child.close(); //唱埃 努扼捞攫飘 按眉甫 close 茄促.
}catch(Exception e){ }
}//finally
}//run 皋辑靛 场
//? 罐篮 皋矫瘤甫 葛电 努扼捞攫飘俊霸 宏肺靛 某胶泼窍扁 困茄 皋辑靛++++++++++++
public void broadcast(String message){
//咯矾 努扼捞攫飘俊霸 傍蜡登绰 秦浆 甘阑 悼扁拳矫糯
synchronized(hm){
try{
//秦浆 甘俊 殿废等 葛电 免仿 胶飘覆阑 掘绢客辑
for( ObjectOutputStream oos : hm.values( )){
oos.writeObject(message); //荐脚 罐篮 皋矫瘤甫 促矫 价脚茄促.
oos.flush();
}
}catch(IOException e){ }
}
}//broadcast 皋辑靛狼 场
//? 庇加富阑 困秦辑 漂沥 努扼捞攫飘俊霸 皋矫瘤甫 焊陈促搁 促澜苞 鞍篮 屈侥栏肺 焊晨.++++++++++++
// /to 酒捞叼 措拳郴侩
public void sendMsg(String message){
//庇加富肺 逞绢柯 皋矫瘤 吝 酒捞叼 何盒俊 秦寸登绰 巩磊凯阑 茫扁 困秦辑
int begin = message.indexOf(" ") + 1; //贸澜 傍归 巩磊 促澜何磐
int end = message.indexOf(" ", begin); //滴 锅掳 傍归 巩磊 荤捞狼 巩磊啊 酒捞叼啊 凳
if(end != -1){
String id = message.substring(begin, end); //焊郴柳 皋矫瘤 吝 酒捞叼 何盒父 掘绢晨
String msg = message.substring(end+1); //酒捞叼 捞饶绰 措拳郴侩捞 等促.
ObjectOutputStream oos = hm.get(id); //秦浆 甘俊辑 酒捞叼肺 免仿 胶飘覆阑 掘绢 晨
try{
if(oos != null){
oos.writeObject(id + "丛捞 促澜苞 鞍篮 蓖加富阑 焊郴继嚼聪促. : " + msg);
oos.flush();
}//if
}catch(IOException e){ }
}//if
}//sendMsg 皋辑靛 场
}//ChatServerThread 努贰胶狼 场
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -