socket一般写的都是一边发送,另外一边接收,这样的对等的情况。
我如何能做到不确定的发送和接收?类似qq消息那样。另外一个问题就是qq能做到你下线后在一定的时间范围内上线,便可以接收到这断时间别人给你留的信息。请给个思路谢谢!最后给大家说个对不起,我只有30分可以发了。前面提问都发的100,没了。我是新手,忘大家给予我帮助。谢谢!

解决方案 »

  1.   

    你client的socket连上另一边的serversocket,建个流就可以收发数据了
    你client随便什么时候都可以发送数据给serversocket的,readline是阻塞式的,流里有东西才会读的你可以把一定时间的内容在服务器上写文件,确定一个接受这得id,等这个人上来了以后,读文件发掉
      

  2.   

    client是可以随便发送东西,但是你servr肯定要用流接收啊。在接收完之前server是组塞的。现在如果想用server发消息怎么进行?
      

  3.   

    1. 据说QQ在消息上用的是UDP
    2. 离线消息一定是存在服务器上,当用户登录时,向服务器发消息,服务器会将相关离线消息返回。
    3. 发消息和发文件一定是两条线程,一条是UDP监听,一条是TCP监听,因为文件必须保证完整性。
    4. 流程大概是这样,用户A向B发消息,A首先向QQServer发送请求,QQServer获取到B的IP并返回给A,A就直接和B进行通信。
      

  4.   

    leaves616() :的想法不错,把要发的东西存入文件,等接受了再读文件发送。呵呵,下来试试具体实现。
      

  5.   

    server当然可以发送数据的,输入输出流,用printwriter里的println发送,然后再使用一下flush就好了。或者不写文件,用数据库里的一张临时表存放消息,记录一个uid,待客户端上线后,就发送掉,记得作个心跳,可以方便判断socket连接接分哈,:)
      

  6.   

    QQ用的不是TCP而是UDP
    UDP不是阻塞的,并且也不维护发送顺序的
      

  7.   

    udp是点对点进行数据交换的。而且一方必须是服务器。另一方是客户端。比如本机既可以是服务端也可以是客户端。并且双方都的开监听就好了。你可以去试试!!!
      

  8.   

    如果多线程实现共用一个socket,是否会发生异常呢?
      

  9.   

    单例模式更加存在socket的工用了,就是不知道抛异常不.
    没在家无ide也无法实验..哪位仁兄有空帮个忙
      

  10.   

    楼主是否想实现象QQ那样子可以指定发送给哪一个人的!
    第一个Client的信息都是发送到Server上去处理的,服务器接收数据后转发给你所要发送的那个人,而这样转发就要知道对方的IP地址,所以你要告诉服务器说转发给那个人,也就是说你发送的信息要包括那个人的IP地址,而这个IP地址就得从服务器发送给你,可以用这个类List来存放你各个在线的用户。
    也就是说你一上线就自动从服务器得到所有的用户的的信息及IP。
    希望这个对你有所帮助。
      

  11.   

    上面这些都理清楚了。主要是工用一个socket是否会抛出异常?
      

  12.   

    当然有可以抛出了,那一般是网络造成的异常,
    比如说服务器关闭,客户端的Socket就会抛出异常,
    所以做这些网络通信的,异常处理真的很重要的,
    要处理的好一点才行的。
      

  13.   

    我的意思这样::比如A线程对socket获取input流,
    B现成获取output流.然后AB同时读和写不同的东西.有异常吗?
      

  14.   

    QQ是UDP???我觉得不太是.UDP的消息发送是没有保证的...
    QQ不会是单独的UDP
      

  15.   

    你的SOCKET没必要做那么多的线程的啊!!
    如果A、B线程都在服务器共享连接同一个线程的话,就应该会抛出异常,
    如果在服务器端是两个不同的线程分别连接的话就不会有异常的,毕竟线程是单独的运行的,不互相干扰的!!
    也没试过,只是理论推测,楼主可以试下做个程序试试!!