小型CHATROOM分析2


● 发送给指定用户的方法:参数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;

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值