社区
Java SE
帖子详情
如何在客户端方判断socket连接是否关闭
gqlao
2004-04-29 10:02:27
我用了socket的isconnected()来判断,然后在连接上服务器端后关闭服务端程序,那么连接应该是中断了吧,可是客户端的isconnected()仍然是true,请问在客户端方判断socket连接的状态应该用什么方法,谢谢。
...全文
470
6
打赏
收藏
如何在客户端方判断socket连接是否关闭
我用了socket的isconnected()来判断,然后在连接上服务器端后关闭服务端程序,那么连接应该是中断了吧,可是客户端的isconnected()仍然是true,请问在客户端方判断socket连接的状态应该用什么方法,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gqlao
2004-04-29
打赏
举报
回复
原来是这样,谢谢楼上各位给的清楚的说明!read抛出异常我知道是断开的,但本来我以为read返回-1并不是代表断开而只是没有收到包。这下解决了我一个大疑问了,谢谢!
ldbingshui
2004-04-29
打赏
举报
回复
检查异常阿
bigcrazy
2004-04-29
打赏
举报
回复
断开会抛出异常的。只需要捕捉异常就可以知道是否断开了。
darksmile
2004-04-29
打赏
举报
回复
正常情况下tcp连接被断开要经过3次握手,然后释放所有资源。这叫做雅致断开,这种情况下双方都知道连接已断开,所以read能够正常返回-1
但是由于网络程序的特殊性,有可能因为网络故障等原因造成不经过3次握手而强行断开,这种情况下双方可能不知道连接实际已经不存在了,所以read会抛出异常
一般这样处理:检查read的返回值,如果是-1则做断开处理,如果read时抛出IOException也做断开处理,如果read正常返回则做接收到数据的操作
gqlao
2004-04-29
打赏
举报
回复
谢谢楼上的解答
"如果连接被雅致断开,那么read返回-1"
这个何解?
darksmile
2004-04-29
打赏
举报
回复
isconnected表示连接是否成功,不能用来判断是否断开
java的socket都是阻塞的,只有一个办法用来判断是否断开:
用socket取得对应的InputStream,然后调用read
如果连接存在,而且有数据可读,那么read返回读出的数据
如果连接存在,但是没有数据可读,那么read将阻塞
如果连接被雅致断开,那么read返回-1
如果连接被强行断开,那么read抛出IO异常
JAVA
socket
收发数据,并支持断网自动
连接
实现
socket
客户端
收发数据,并支持
客户端
断网或服务器重启后重连
如何在C语言中
判断
socket
是否
已经断开
下面来介绍
判断
非阻塞
SOCKET
是否
已经断开的几种
方
法: 注意要区分不同操作系统分别进行测试, 包括WINDOWS, LINUX和UNIX会各有不同。 在WINDOWS下比较简单,可以使用FD_CLOSE事件
判断
SOCKET
是否
已经断开 view plaincopy to clipboardprint? bool Is
Socket
Closed(
SOCKET
client
Socket
) { bool ret = false; HANDLE closeEvent = WSACreateEvent(); WSAEventSelect(client
Socket
, closeEvent, FD
android wifi 热点
连接
以及
Socket
通信(经测试有效)
wifi热点的建立
连接
以及通信(聊天室设计,目前由于手机有限,仅在两手机测试通过)
客户端
怎么
判断
Socket
连接
已与服务器断开
原文地址:http://blog.csdn.net/god2469/article/details/8801356 下面来罗列一下
判断
远端已经断开的
方
法: 法一: 当recv()返回值小于等于0时,
socket
连接
断开。但是还需要
判断
errno
是否
等于 EINTR,如果errno == EINTR 则说明recv函数是由于程序接收到信号后返回的,
socket
连接
还是正常的,
服务器中
判断
客户端
socket
断开
连接
的
方
法
1, 如果服务端的
Socket
比
客户端
的
Socket
先
关闭
,会导致
客户端
出现TIME_WAIT状态,占用系统资源。 所以,必须等
客户端
先
关闭
Socket
后,服务器端再
关闭
Socket
才能避免TIME_WAIT状态的出现。 2, 在linux下写
socket
的程序的时候,如果尝试send到一个disconnected
socket
上,就会让底层抛出一个SIGPIPE信号。 clie
Java SE
62,623
社区成员
307,257
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章