如何测试一个Socket是否已断开?
如题,要求是在不向该Socket的流发送或者是接收任何消息,怎样知道它是否仍然是有效的,谢谢!
问题点数:50、回复次数:9Top
1 楼gujunyan(缘份擦肩而过)回复于 2003-06-06 13:16:32 得分 10
if(Socket.Connected)
{
还连着
}else
{
断了.
}Top
2 楼epoluodi(太阳神)回复于 2003-06-23 20:26:44 得分 0
楼上的是白痴阿Top
3 楼clever_boy_2000(郭敬)回复于 2003-06-25 14:50:27 得分 0
哈哈Top
4 楼feifa(孤程)回复于 2003-06-27 16:47:37 得分 20
上面的方法错误,我把我的程序写出来,需要在线程里检测,检测到断开,要退出线程.
private TcpClient client;
private Thread threadReceive ;
private NetworkStream stream;
private TcpListener tliten1;
private void receive()
{
//设置读取数据的空间
byte[] bb = new byte[50];
while(true)
{
int i = stream.Read(bb,0,50);
if(i==0)
{
richTextBox1.AppendText("对方断开连接"+"\r\b");
break;
}
//转换成字符串,如果是中文控制码则用
string ss =System.Text.Encoding.Unicode.GetString(bb);
string ss = Encoding.ASCII.GetString(bb);
richTextBox1.AppendText(ss+"\r\b");
}
}
try
{
stream = client.GetStream();
if(stream.CanWrite)
{
//发送控制码
string sendtext =textBox2.Text;
byte[] by =System.Text.Encoding.ASCII.GetBytes(sendtext.ToCharArray());
//byte[] by =System.Text.Encoding.Unicode.GetBytes(sendtext.ToCharArray());
stream.Write(by,0,by.Length);
//下次使用
stream.Flush();
//启动接收反回数据的线程
//receive是线程执行的函数,见后面的分析
threadReceive = new Thread(new ThreadStart(receive));
threadReceive.IsBackground=true;
threadReceive.Start();
}
}
catch(Exception ee)
{
richTextBox1.AppendText (ee.Message+"\r");
MessageBox.Show(ee.Message);
}Top
5 楼feifa(孤程)回复于 2003-06-27 16:51:45 得分 0
上面的程序,第一段是检测网络断开的,下面的没有加过程名,是启动线程的过程名.Top
6 楼huicfjun(forrest)回复于 2003-07-08 08:08:14 得分 20
import System.Net.Sockets.*;
Socket s = new Socket(...);
if (s.get_Connected()){
//连接正常
}else{
//已断开
}
不过这样测试会占一定的带宽,最好是在传送数据的时候捕捉异常加以判断。
try{
sout.write(GBK.toBytes(str));
sout.flush();
}catch(Exception e){
//断线处理
return;
}
Top




