怎样判定socket连接已经关闭?

Arsoka 2007-05-11 10:33:40
用socket连接远程服务器时,有时候会发生远程服务器断开连接,改如何判断?
我用C# TcpClient,有时候server已经关闭,但是TcpClient.connected还是true(比如server的80端口),用什么方法判断比较好?
...全文
859 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzd24 2007-05-21
  • 打赏
  • 举报
回复
我的Blog上有一篇文章就是讲这个的,你可以去看看!
http://blog.csdn.net/wzd24
Arsoka 2007-05-21
  • 打赏
  • 举报
回复
我用C#提供的封装,MSDN上提供的方案没有一种能够成功,用netstat查看连接已经断开的情况下,socket返回的还是true。貌似是无法在这一层上实现了。
mygod_good 2007-05-12
  • 打赏
  • 举报
回复
http://www.cnblogs.com/liuzhiwei/archive/2007/04/24/725348.html
wzd24 2007-05-12
  • 打赏
  • 举报
回复
LS的,你Blog上的写的方法并不能检测基础网络异常。
网_风 2007-05-12
  • 打赏
  • 举报
回复
http://blog.csdn.net/nstorm/archive/2004/12/27/231192.aspx

同步和异步连接拔掉网线可能检测不到。
zhangliu_521 2007-05-12
  • 打赏
  • 举报
回复
昨天刚刚把我所有的家当都散了.
这个:http://community.csdn.net/Expert/topic/5524/5524609.xml?temp=.4617731

wzd24 2007-05-12
  • 打赏
  • 举报
回复
呵呵………………
我才抢了一个月的分!
当然没你多了!!!
升星了记得散点分给我哦!:)
zhangliu_521 2007-05-12
  • 打赏
  • 举报
回复
哈哈
我3700多了哦
wzd24 2007-05-12
  • 打赏
  • 举报
回复
还差2000分!才3100多一些!
zhangliu_521 2007-05-12
  • 打赏
  • 举报
回复
牧兄要升星了吧...
wzd24 2007-05-12
  • 打赏
  • 举报
回复
呵呵………………
LS的兄弟!
zhangliu_521 2007-05-12
  • 打赏
  • 举报
回复
sock.Listen(50);
listenshow.Text="主机"+myIP+"端口:8545开始监听......\r\n";
while(true)
{



temp = sock.Accept();
if(temp.Connected == true)
{
listenshow.Text = "与客户建立连接!";
this.send1.Enabled = true;

while(bb)
{
int byteRecv = 0;
try
{
Byte[] bbb=new Byte[64];
byteRecv = temp.Receive(bbb,bbb.Length,0);
if(byteRecv < 1)
{
temp.Close();
temp = null;
listenshow.Text = "与客户断开连接!从新监听!";
this.send1.Enabled = false;
this.showimage.Text = "";
break;
}
string ccc=System.Text.Encoding.BigEndianUnicode.GetString(bbb);

showimage.AppendText(ccc+"\r\n");
}

catch(SocketException ex)
{
MessageBox.Show(ex.ToString());
temp.Close();
listenshow.Text = "与客户断开连接。";
this.send1.Enabled = false;
this.showimage.Text = "";
break;
}

catch(ObjectDisposedException ex)
{
MessageBox.Show(ex.ToString());
break;
}

}

}



wzd24(牧野)(衣带渐宽终不悔,为伊消得人憔悴) 兄弟帮忙解决的...
那出来让兄弟参考..
frankla 2007-05-12
  • 打赏
  • 举报
回复
只有定时发信息可以

因为如果客户端直接拔网线 服务器端捕捉不到任何错误
wzd24 2007-05-12
  • 打赏
  • 举报
回复
直接用Socket类吧,这个比较好控制!!
Socket对象在对方断开连接的时候Receive方法会返回一个0字节的数据包。这样就可以判断对方是否断开连接了。
likevs 2007-05-11
  • 打赏
  • 举报
回复
写个try catch来捕捉吧
SnApnet 2007-05-11
  • 打赏
  • 举报
回复
服务端断开,你还要连的话会报错的啊

111,119

社区成员

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

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

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