我想在服务端通过sendUrgentData(data)来判断客户端是否断开,现在如果我把服务端和客户端都放在同一台电脑上测试没问题,客户端不会接收发送的紧急消息,但当我把服务端和客户端放在不同的电脑上的话,客户端就会接收到服务端发送的紧急消息。这是什么原因?如何禁止客户端不收到紧急消息?我试过setOOBInline(false)也不行,请帮忙!

解决方案 »

  1.   

    传统方法是设置心跳包, 
    就是确定一定时间就进行通讯一次。 
    如果没有收到回复,那么就为断开状态。 思路就是这个,socket下的都一样。
      

  2.   

    writer1.checkError()  writer1假定是客户端的输出   这样就能检测他是不是关闭了
      

  3.   

    socket一方断开另一方会抛异常的
      

  4.   

    你做的是通信的项目还是自己随便写的程序,你有没有把你的Socket封装。
    看样子你应该没有,如果你有的话,只是把一个包特殊一点,不传输数据,只是判断连接是否正常。
    如果你要这样的一个例子,问1楼要吧,呵呵。
    不过我简单的描述一下:
    1、把Socket通信封装一下。
    2、把发送的内容封装一下。
    3、搭建一个通信的框架。
    4、建立若干个特殊包(2中有内容的封装),应答,确认,心跳等等内容一致的可以做成特殊包。
    多的不说了,如果有不同意见的可以发表一下。
      

  5.   

    项目的,没有封装的。为什么使用sendUrgentData时,服务端和客户端不在同一台电脑客户端就会接收紧急消息呢?
      

  6.   

    没用过这个。
    data - 要发送的数据字节 
    同一台电脑肯定传输没有问题,网络传输可能会由多包传输。
    如果你非要用这个,请楼下用过的人来解释。
    源码里也看不出有什么特别的。
      

  7.   

    我的问题已经通过其他途径解决!
    但还是不明白客户端为什么会接收 通过sendUrgentData发送的 紧急消息