日期:2014-05-19  浏览次数:20642 次

java实时通信的问题
大家好,现在客户要求做一个网页版的即时通信功能,项目经理说要用P2P技术做,我了解了下,知道一端监视一个端口比如:
······
ServerSocket serverSocket = new ServerSocket(10000);
Socket s = serverSocket.accept();
······
然后会阻塞在这里一直等到有消息触发;
其他端:
······
Socket s = new Socket("127.0.0.1", 10000);
······
可以发送消息给本机 10000端口的应用程序,这样子再加上点代码就可以达到信息的发送和接受,
但是我有点不明白,也是希望大家帮我指明思路的:
  如果我要发送一些信息到一个网吧里面的一台机器上,或者是某个公司的机器上,这些机器相对于外网只是一个内网的ip没有公网的ip,这样子我即时知道他们的端口号不知道他们的公网ip是发送不了信息过去的,唯一能想到的是在他们的路由器上做一个端口映射,就能通过公网ip+外部端口映射到内部的ip到端口对应的应用程序上。
  但是不可能每个路由器上我都去人工的做一个端口映射吧,而且我不确定这两台要即时通信的机器是哪两台,不可能去人工在路由器上配置端口映射的,请问这怎么解决。
  如果您有很标准清晰的答案而且觉得在这里说很麻烦那么请留下您的QQ,在你闲下的时候来请教您,谢谢。

------解决方案--------------------
这个跟软件没关系,是计算机网络的知识。

你只要把网络配置到所有客户端都能ping通服务器端的ip,那就可以做了,否则是不行的。
------解决方案--------------------
“现在客户要求做一个网页版的即时通信功能”

根据你这个需求,你得去了解“长连接”“服务器推”技术。这个不需要服务器能访问客户端。
------解决方案--------------------
实在不意思,公司不允许上QQ。

你去网上搜索一下吧,还是很多资料的。

或都用dwr框架也可以实现。
------解决方案--------------------
只要客户端连接到服务器,就能够知道该客户端的IP,如果你是用socket的话可以直接打印socket看看