关于TCP的问题(50分)

  • 主题发起人 主题发起人 zwjChina
  • 开始时间 开始时间
Z

zwjChina

Unregistered / Unconfirmed
GUEST, unregistred user!
直接使用Winsock API,对于一个已经连接好了的套接字,此时如果网络发生故障,
例如网线断了,如何判断该套接字上的连接已经断开?
 
系统没有消息发出吗?
 
如果网线断了,却没有消息发送或主动读取,是不能发现的。

所以很多应用协议里都加入了“链路检测”的协议包
 
如果断啦,socket 会返回一个异常,你捕捉他然后处理就是啦
 
能够具体说一下实现方法吗?
 
请关注一下!
 
最简单的伪代码。
var netok :boolean;
begin
try
netok := true;
连接网络
except
netok := false;
showmessage('网络不OK!');
end;
 
娃娃, 你对TCP可能不是很了解!:)
在一个套接字连接好之后,即使把网线拔掉也没办法获得异常,而且往该套接字发送几
个字符(数据量不大的情况下),发送(也就是Send,任然成功),这个时候,我该如何判
断网络已经断开了?
 
用定时检测链路的方式,只能这样了。
 
to huntor
谢谢你,能告诉我如何定时检测链路吗?我用select,send都无法即时获得连接断开的信息。
 
sorry,前几天参加培训,没有上网。

“链路检测”是基于应用层通信协议为自己定义的情况的,不知道你的程序是否是这种情况。

我的想法是: 定义“链路检测包”和“链路检测应答包”

socket客户端:定时发送“链路检测包”给服务端程序,若在一定时间内没有应答包送回,
则认为链路故障,断开连接即可;
之后若再连接就会根据实际情况返回是否成功的信息了。
socket服务端:除了对“链路检测包”回应“应答包”外,也可以设置用户连接状态表,
对于每个连接的客户端都定时发送“链路检测包”,没有应答的客户端则断开连接。

不知道是否适合你的情况。

 
多人接受答案了。
 
后退
顶部