关于socket的tcp连接中断的实时判断

zhui22222 2010-09-06 06:43:44
用socket写的异步收发的tcpserver,求能及时判断连接的中断的方法,包括客户端的非正常退出。
或者说在异步发送数据前能否判断连接是否已断开,要实时的。
主要是在实际使用时发现,当正在向多个client异步高速发送数据时,如遇多个连接同时关闭,会导致程序自动退出,有时用try也捕获不到,求解决办法。
...全文
327 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tomexou 2010-09-07
  • 打赏
  • 举报
回复
TCP的断线问题,一直是很难处理的问题
大部分用try/catch来捕捉,再多试试啰!
zhui22222 2010-09-06
  • 打赏
  • 举报
回复
仔细查了下,好像是存客户端端口的链表没有lock,不报错直接退出,查起问题来太痛苦了
wenbin 2010-09-06
  • 打赏
  • 举报
回复
想太实时就不能用C#来完成了

每次做异常捕获是应该的,毕竟谁也不能保证网络质量一次都不能断的。
捷哥1999 2010-09-06
  • 打赏
  • 举报
回复
chenhansong2008 2010-09-06
  • 打赏
  • 举报
回复
查一下api文档应该有吧
zhui22222 2010-09-06
  • 打赏
  • 举报
回复
楼上的方法曾经试过,好像也有延迟的吧。
wuyq11 2010-09-06
  • 打赏
  • 举报
回复
Socket.Available属性
timer
if (socket.Poll(100, SelectMode.SelectRead)){}
yyd021 2010-09-06
  • 打赏
  • 举报
回复

// .Connect throws an exception if unsuccessful
client.Connect(anEndPoint);

// This is how you can determine whether a socket is still connected.
bool blockingState = client.Blocking;
try
{
byte [] tmp = new byte[1];

client.Blocking = false;
client.Send(tmp, 0, 0);
Console.WriteLine("Connected!");
}
catch (SocketException e)
{
// 10035 == WSAEWOULDBLOCK
if (e.NativeErrorCode.Equals(10035))
Console.WriteLine("Still Connected, but the Send would block");
else
{
Console.WriteLine("Disconnected: error code {0}!", e.NativeErrorCode);
}
}
finally
{
client.Blocking = blockingState;
}

Console.WriteLine("Connected: {0}", client.Connected);

CSDN上这样说的,我觉得每次发送前要处理一次异常,系统开销比较大。可是还没有找到更好的办法

111,093

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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