【发布时间】:2018-06-25 23:04:50
【问题描述】:
我尝试通过 tcp 连接连接许多打印机。我正在尝试验证我的 TcpClient 是否仍然连接以更新 GUI。我正在尝试写入套接字以确保其仍然连接。即使拔掉电缆我也不例外我在这里尝试了所有建议MSDN_Fourm
我在尝试检查打印机状态后收到预期的异常
伪代码 client是之前已经连接过的TCPClient
private bool FuntionPsudo(){
try{
if(client.Connected){
byte[] buf = new byte[1];
client.Client.Send(buf, 0,0);
client.GetStream().Write(buf,0,0);
if(client.Client.Receive(buf,SocketFlags.Peek)==0)
return false;
return true;
}
}
catch(Exception){
return false;
}
return false;
}
FuntionPsudo 返回:true
电缆已拔下
FuntionPsudo 返回:true
FuntionPsudo 返回:true
检查打印机状态
FuntionPsudo 返回:false
提前感谢您提供有关为什么会发生这种情况和/或如何解决它的任何帮助
【问题讨论】:
-
拔下电缆不会自动关闭现有连接,因为该连接的任何一方都不关心/知道物理状态。这就是超时的用途。
-
好的,但是当我写入套接字时,它不应该抛出异常吗?
-
除非连接/套接字实际上已关闭,否则不会。如果您手动关闭套接字,或者等待很长时间以使连接超时,是否会引发异常?
-
如果我使用
client.Close();我确实得到了异常,有没有办法判断套接字是否仍然连接?