谁能给我说一下java多用户聊天程序的实现过程。服务端客户端都需要多线程吗?需要把IP和用户ID一 10
谁能给我说一下java多用户聊天程序的实现过程。服务端客户端都需要多线程吗?需要把IP和用户ID一对一存起来还是存线程或者存socket。不太懂。大神具体点谢谢...
谁能给我说一下java多用户聊天程序的实现过程。服务端客户端都需要多线程吗?需要把IP和用户ID一对一存起来还是存线程或者存socket。不太懂。大神具体点谢谢
展开
3个回答
展开全部
我写的思路是这样的,服务器是一个类,客户端一个类,客户端的Socket连接服务端的ServerSocket后会返回一个Socket对象,由这个Socket和客户端沟通,我们可以将这个Socket传递到另一个类中去,这个类就相当于你拨打10086人工服务,它会给你分配一个客服,你把这个Socket传到另一个类中去,通过构造方法赋值给这个类的成员变量(也是一个Socket),然后给这个Socket通过获得输入输出流为它写一个发送方法和一个接收线程(因为不知道消息何时会接收到,接收和发送要独立运行)
具体就是
ServerSocket server=new ServerSocket(8888)
Socket ss=server.accept();
ChatThread ct=new ChatThread(ss);
再用一个集合把ct装进去,当接收到消息后就调用服务器里的方法进行发送
而你的集合里也装了这些对象,就可以取出来调用send方法,最好带一个参数send(消息)
比如你存到ArrayList al中;
就
al.get(???).send(消息);
class ChatThread()
{
private Socket ss;
//还要通过ss获取输入输出流
public ChatThread(Socket ss)
{
this.ss=ss;
}
public void send(带个参数,消息)
{
}
//再写个线程接收
}
更多追问追答
追问
嗯。这个我知道。线程是要和用户一一对应的?不用ip?
追答
这个IP要使用网络IP,就是服务器所在电脑打开网页百度“IP”出来那个IP
客户端登录的时候就应该输入一个服务器端的ip地址,我的是这样的
两个Socket是相匹配的,只能这两个沟通,这边发送的消息只能背与之匹配的那个Socket的接收线程收到
展开全部
服务端需要创建线程池来管理客户端的连接线程,避免系统资源过度浪费。也就是说服务端的socket一直监听,有请求进来就把这个请求分配给线程池去处理,而socket继续监听,接受下一个请求,如果让socket自己来处理请求,则后续的请求就都无法进入了。
服务端以map形式存放客户端数据,key=客户名称;value=聊天内容,即存放客户端的输出流。
如果需要代码,我可以给你一套参考。
服务端以map形式存放客户端数据,key=客户名称;value=聊天内容,即存放客户端的输出流。
如果需要代码,我可以给你一套参考。
更多追问追答
追问
每个用户对应一个服务端线程吗?线程池可以将线程和用户对应起来?不用IP?
追答
作为客户端,在使用的时候先创建昵称,并且把昵称发送到服务端进行验证,如果该昵称被占用了,则改名,如果可以用,则服务端返回信息,xx昵称,你好。
Map里面存放的是昵称和客户端的输出流。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你是需要代码么
追问
不要代码。我要思想。怎么实现的
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询