如何判断socket客户端连接断开?

plplum 2010-03-11 09:19:08
我想在服务端通过sendUrgentData(data)来判断客户端是否断开,现在如果我把服务端和客户端都放在同一台电脑上测试没问题,客户端不会接收发送的紧急消息,但当我把服务端和客户端放在不同的电脑上的话,客户端就会接收到服务端发送的紧急消息。这是什么原因?如何禁止客户端不收到紧急消息?我试过setOOBInline(false)也不行,请帮忙!
...全文
797 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
java小强 2012-11-09
  • 打赏
  • 举报
回复
靠,怎么解决的最后不说,问问题的怎么都这么无耻
lliiqiang 2010-03-12
  • 打赏
  • 举报
回复
向一端发送事先指定的信息,如果没有回应就证明已断开
liguang168 2010-03-12
  • 打赏
  • 举报
回复
没用过这个。
data - 要发送的数据字节
同一台电脑肯定传输没有问题,网络传输可能会由多包传输。
如果你非要用这个,请楼下用过的人来解释。
源码里也看不出有什么特别的。
plplum 2010-03-12
  • 打赏
  • 举报
回复
项目的,没有封装的。为什么使用sendUrgentData时,服务端和客户端不在同一台电脑客户端就会接收紧急消息呢?
[Quote=引用 6 楼 liguang168 的回复:]
你做的是通信的项目还是自己随便写的程序,你有没有把你的Socket封装。
看样子你应该没有,如果你有的话,只是把一个包特殊一点,不传输数据,只是判断连接是否正常。
如果你要这样的一个例子,问1楼要吧,呵呵。
不过我简单的描述一下:
1、把Socket通信封装一下。
2、把发送的内容封装一下。
3、搭建一个通信的框架。
4、建立若干个特殊包(2中有内容的封装),应答,确认,心跳等等内容一致的可以做成特殊包。
多的不说了,如果有不同意见的可以发表一下。
[/Quote]
liguang168 2010-03-12
  • 打赏
  • 举报
回复
你做的是通信的项目还是自己随便写的程序,你有没有把你的Socket封装。
看样子你应该没有,如果你有的话,只是把一个包特殊一点,不传输数据,只是判断连接是否正常。
如果你要这样的一个例子,问1楼要吧,呵呵。
不过我简单的描述一下:
1、把Socket通信封装一下。
2、把发送的内容封装一下。
3、搭建一个通信的框架。
4、建立若干个特殊包(2中有内容的封装),应答,确认,心跳等等内容一致的可以做成特殊包。
多的不说了,如果有不同意见的可以发表一下。
plplum 2010-03-12
  • 打赏
  • 举报
回复

能否给个例子呢

[Quote=引用 1 楼 javaalpha 的回复:]
传统方法是设置心跳包,
就是确定一定时间就进行通讯一次。
如果没有收到回复,那么就为断开状态。

思路就是这个,socket下的都一样。
[/Quote]
liguang168 2010-03-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 javaalpha 的回复:]
传统方法是设置心跳包,
就是确定一定时间就进行通讯一次。
如果没有收到回复,那么就为断开状态。

思路就是这个,socket下的都一样。
[/Quote]
==============================================
不错,通信一般都有心跳。也会异常。
bawgiitx 2010-03-12
  • 打赏
  • 举报
回复
socket一方断开另一方会抛异常的
plplum 2010-03-12
  • 打赏
  • 举报
回复
我的问题已经通过其他途径解决!
但还是不明白客户端为什么会接收 通过sendUrgentData发送的 紧急消息
SADSDSDDASDASD 2010-03-11
  • 打赏
  • 举报
回复
writer1.checkError() writer1假定是客户端的输出 这样就能检测他是不是关闭了
JavaAlpha 2010-03-11
  • 打赏
  • 举报
回复
传统方法是设置心跳包,
就是确定一定时间就进行通讯一次。
如果没有收到回复,那么就为断开状态。

思路就是这个,socket下的都一样。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧