想巩固一下J2SE的内容,最终决定做一个模仿QQ的聊天程序,因为这个小程序里几乎包含了J2SE的大部分知识。有人会说:你这不就是个C/S的通讯吗。  你这个不就是个什么什么吗。
    是的,我这个就是一个小东西,因为不会所以我才做动手做。    我程序的大概思路是:某一个用户登录,通过服务器把自己的信息和在线好友的信息全部下载到本地,这里好友的信息包括Socket的一部分内容,我想在某一个用户发起对好友会话时候新new一个TCP或UDP的链接。
    但是,目前看来是不可以的,因为如果这么做的话,对方要是走路由器的话,那么信息就不会接收到。    于是我想到用服务器进行转发(这里我不知道腾讯是不是这么做的,用服务器转发消息?如果知道的朋友可以告诉我一下)
    因为用服务器转发是在服务器端保留用户的Socket信息,通过getOutPutStream来进行通讯;所以我还有另一种想法:
        客户登陆时候我保存一些信息,那么我可不可以用这些信息给转变成一个Socket呢?
        也就是强制类型转换,这样的话我就可以把信息存到数据库中,等某个用户需要时再从数据库中拿出相关信息 进行类型转换,变成Socket。    我的问题就是:1.这种类型转换可能实现么?如何实现?
                  2.腾讯公司是用服务器转发消息吗?    在这里先谢谢各位!

解决方案 »

  1.   

    通过和服务器连接的socket发送信息,然后让服务器中转实现起来比较方便,就不说了。我也考虑过客户端直接通信的问题,我的想法是:客户端A在连上服务器端后也用ServerSocket监听一个端口,然后把这个端口的信息发到服务器,放着。另一个客户端B想连这个客户端A,服务器就把这个客户端A的ServerSocket所监听的端口信息发给B,B再往A的监听端口发请求,A端接到请求新建一个线程管理这个连接,然后继续监听端口。就这样。
      

  2.   


    API文档:socket是两台机器间通信的端点。 你第一句里说的客户登陆时候的信息保存为socket,应该是指客户端和服务器端之间的socket吧你第二句里说的拿出相关信息。你的意思是拿出表示客户端和服务器端连接的socket给那个“某个用户需要”里说的用户吗?
      

  3.   


        先谢谢你哈!你这个想法我大概能明白,是不是说你想在用户A成功登陆后 在自己的客户端起一个ServerSocket,之后吧这个对象发送到服务器,让服务器保留,当其他用户想与A通讯后 用这个服务器中保存的对象进行连接?
         那如果是这样的话,为什么不直接让服务器保存A登陆后的一个Socket呢?这样的话也能达到同样的效果呀。
      

  4.   


    我想的是把A这个ServerSocket里的信息保存到数据库中,当B想用的时候在从数据库中取出来,再给包装成B所需要的对象。可是不知道能不能这么做
      

  5.   

    Java P2P 通信 非C/S模式通信
      

  6.   

       是不是可以利用server来进行一些服务性的操作呢?比如为P2P做一些基础准备,为用户提供好友的port
      

  7.   

    是啊,不知道怎么去实现,不知道怎么去用这些数据包装成一个对应的socket对象