前言
昨天我写了Socket编程的聊天室项目 点击查看,不过没有放私聊功能,今天来加上
一、私聊对象的指定
想要私聊我们需要先指定一个对象,怎么指定呢,我们想到每一条消息发送都需要进过服务器,我们可以在消息中指定私聊对象
那服务器如何区分对象名称和消息内容的,这里就需要我们来约定一个格式、
此处采用<对象名>@<消息> 的格式
二、程序的改变
应该想到,本次程序代码的改变全部发生在服务器端,只需要对接收的信息做进一步分析,便可以做出私聊还是群聊的动作
首先,建立一个Map,用来存储对象host 以及PrintWriter对象的对应关系
然后在服务器接收到一条消息 后,在原本的判断后面加一句如果line包含“@”就说明这句是私聊信息,代码如下:
else if(line.contains("@")){//私聊
String[] data=line.split("@");
String obClient=data[0];
line=data[1];
PrivateSend(obClient,line);//这个方法是我抽出来的私聊方法
continue;//注意私聊的话就到这句结束即可,不需要走下边的群聊全部转发流程
}
私聊方法PrivateSend()
obClient表示私聊对象的host名称,后面的mes表示要发送的信息
private void PrivateSend(String obClient,String mes){
PrintWriter printWriter = allSocket.get(obClient);
printWriter.println("来自"+host+"的私聊:"+mes);//对客户端显示
System.out.println(host+"对"+obClient+"私聊:"+mes);//对服务器端展示
}
总结
私聊确实没难度,稍稍掌握一些套路即可,如果你没想法,那你还得学