谁能给我说一下java多用户聊天程序的实现过程。服务端客户端都需要多线程吗?需要把IP和用户ID一 10

谁能给我说一下java多用户聊天程序的实现过程。服务端客户端都需要多线程吗?需要把IP和用户ID一对一存起来还是存线程或者存socket。不太懂。大神具体点谢谢... 谁能给我说一下java多用户聊天程序的实现过程。服务端客户端都需要多线程吗?需要把IP和用户ID一对一存起来还是存线程或者存socket。不太懂。大神具体点谢谢 展开
 我来答
Monubia
2015-01-21 · TA获得超过8961个赞
知道大有可为答主
回答量:4373
采纳率:75%
帮助的人:1323万
展开全部

我写的思路是这样的,服务器是一个类,客户端一个类,客户端的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的接收线程收到
armslave88
2015-01-21 · TA获得超过416个赞
知道小有建树答主
回答量:535
采纳率:100%
帮助的人:459万
展开全部
服务端需要创建线程池来管理客户端的连接线程,避免系统资源过度浪费。也就是说服务端的socket一直监听,有请求进来就把这个请求分配给线程池去处理,而socket继续监听,接受下一个请求,如果让socket自己来处理请求,则后续的请求就都无法进入了。
服务端以map形式存放客户端数据,key=客户名称;value=聊天内容,即存放客户端的输出流。

如果需要代码,我可以给你一套参考。
更多追问追答
追问
每个用户对应一个服务端线程吗?线程池可以将线程和用户对应起来?不用IP?
追答
作为客户端,在使用的时候先创建昵称,并且把昵称发送到服务端进行验证,如果该昵称被占用了,则改名,如果可以用,则服务端返回信息,xx昵称,你好。

Map里面存放的是昵称和客户端的输出流。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帅小武说
2015-01-21 · TA获得超过131个赞
知道小有建树答主
回答量:473
采纳率:0%
帮助的人:200万
展开全部
你是需要代码么
追问
不要代码。我要思想。怎么实现的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式