建私人聊天室的一个问题

偶是菜鸟,第一次来这里,还请大师们多多指点!:P

我在做一个私人聊天室,设计思想是这样的:

客户A进去以后,可以选择看看在线客户列表,然后选择一个人,比如B,告诉服务器,服务器再告诉B,一旦B答应和他聊天了,服务器返回这个消息。A就是一个暂时的服务器了,开放一个socket,用于监听来自B的请求,B发出一个请求以后,A给他分配一个socket,这样他俩就可以直接通信了,不通过服务器中转。在A和B聊天的时候,如果C告诉服务器,他要和A或者B聊天,服务器会告诉他他俩正忙着,没功夫理他,一边待着去吧。

现在的问题是,我已经完成了包括在线用户列表、让C等待,建立A和B连接在内的一些任务,可是A和B说什么都不能互相通信。

因为A要是一个暂时的服务器,所以她开了一个serverSocket,B那一端是由A分配的Socket,B可以自由地读进写出,但是A这边我就迷糊了,serverSocketh和Socket毕竟不一样,没有getinputStream什么的,他怎么把数据读进来并且显示出来呢?我不知道是不是serverSocket里面有些method我还不知道,查了一下doc,也没有找到合适的method。或者有别的socket类型可以完成这个?或者我这个思路有问题?还是代码写得有问题?

唉,迷茫了好几天了,希望可以在这里得到高人的点化!谢过了谢过了!:)

我的email:flysing@sohu.com,欢迎大家给我建议,或者在这里回复。:)

如果你使用的是非堵塞I/O,那么是否能读取数据,是依赖NIO的触发机制,而且NIO需要你程序设定当前是读状态还是写状态,关于NIO机制需要多研究一下。

也可以参考我的"Java实用系统开发指南"的第一章。

首先提出个问题,如果A或者B使用局域网、防火墙什么的,这种设计就不行了

其次,serverSocket只负责端口桢听,当B连上这个端口的时候可以生成一个Socket对象,就这样

现在不是有一个XML的技术吗,好像java中对xml也有很好的支持,xml可以“穿过“防火墙

兄弟,给点专业精神,什么叫xml可以穿越防火墙呀
你说的的大概是webservice、soap或xml-rpc,这些技术用http协议来传输
xml,而一般的公司的防火墙是不会关80端口的,所以可以穿越防火墙

所以A和B聊天,最好A和B都开一个Socket端口在监听,收到消息之后直接向对方的的监听端口发回复。
如果A和B都开80端口,一样可以过一般的防火墙

ServerSocket acppet之后不就有Socket了吗?
有了Socket就可以透过它来跟client沟通了...
不知道你要问的是不是这个问题

A/B都应是server,也都是client

> A/B都应是server,也都是client

偶说错了!斑竹删掉把

在A处:
Socket clientSocket = null;
clientSocket = ServeSocket.accept();
然后用clientSocket.getInputStream()不就搞定了

搭车问下,如果A和B是不同公司的两台机器(都没有外网IP),如何实现不通过服务器聊天?