● 发送给指定用户的方法:参数srcName代表发送者,msgContent发送的内容,destName接受消息的人
Public static synchronized sendToOnlyUser(String srcName,String msgContent,String destName)
{
//向客户端队列 的一个遍历发送
msgContent= srcName+”说”+”\r\n”;
//创建一个集合,把实例化了的用户线程队列clientMap放进去
java.util.Set<String > Set=clientMap.keySet();
java.util.Iretarator keyIT= Set.iterator();
while(keyIT.hasNext())
{
String keysUser= keyIT.next();
ProcessClient pc=clientMap.get(keysUser);
//开始向一个指定的对象发送消息
If(keysUser.equalsIgnoreCase(destName))
{
System.out.println(“进入私人聊天时间!”);
msgContent= srcName+”对你说”+ msgContent+”\r\n”;
pc.sendToClient(srcName,msgContent);
}
}
}
2:创建独立线程,处理对应客户端Socket请求的类
Public class ProcessClient extends Thread
{
Public ProcessClient(java.net.Socket client)
{
This.client=client;
}
Public void run()
{
}
//处理客户端的连接
Public void chatClient(java.net.Socket socket)
{
Try{
This.userAddress= socket.getRemoteSocketAddress.toString();
Java.io.InputStream ins= socket.getInputStream();
Java.io.OutPutStream ous=socket.getOutPutStream();
Int i=0;
StringBuffer sb=new StringBuffer();
username=getUserName(ins ,ous);
//输入用户名成功将自己加入到对象列表中
UserManager.addUserThread(username,this);
String msg= username+”在登陆前有”+UserManager.getOnlineCount()+”人”;
UserManager.sendToAllUser(“系统”+ msg);
String msgToOnly;
While(true)
{
I=ins.read();
//客户端回车 代表消息已经发送完毕
If(i==13)
{
String s=sb.toString();
}
}
}
Catch(Exception e)
{
}
}
//得到用户名
Public String getUserName(java.io.InputStream ins,java.io.OutputStream ous)
{
String userName=””;
Try{
Int i=0;
StringBuffer sb=new StringBuffer();
String welcomeMsg=”你好,欢迎加入聊天室,请输入你的名字:\r\n!”;
Ous.write(welcomeMsg.getBytes());
//读取用户名
If((i=int.read())!=-1)
{
If(int==13)
{
userName=sb.toString();
userName=(ISO2GBK)userName;
}
}
}
Catch()
{}
Return userName;
}
//对消息内容进行编码,以免出现乱码
Public String ISO2GBK(String src)
{
Try{
Src=new String (src.getBytes(“ISO-8859-1”),”GBK”);
}
Catch(Exception e)
{}
}
Private String username;
Private String userAddress;
Private Socket client;
}
小型CHATROOM分析2
最新推荐文章于 2024-11-11 14:56:33 发布