哈哈哈哈...客户端关闭Socket时主机删除Socket 连接莫名解决

      C#学习 2005-12-25 20:21

      早就写了C# Socket+Flash的聊天程序,因为内网的ip,一直没有拿出来,还有就是bug n多,这几天又在看C#,就想做个C# Socket+Flash游戏大厅,就把聊天程序拿出来检察一下,其他问题都很好解决,可是在flash没有按下退出按钮时候去关闭页面,就会让主机得不到客户机退出的休息,msdn+Google:
      TcpClient 的派生类可使用此属性(active)来确定连接尝试是否已成功。此属性不监视 TcpClient 连接的当前状态。如果远程主机关闭连接,将不更新 Active。
      可使用 Connected 属性来获取 Socket 的连接状态。此属性将返回 Socket 的最新已知状态。当它返回 false 时,表明 Socket 要么从未连接,要么已断开连接。即使 Connected 返回 true,也无法保证 Socket 仍处于 Connected 状态。true 值仅意味着在上次 I/O 操作时 Socket 处于连接状态。
       都没有查出来,郁闷了一天,后来在实用其他办法的时候偶然检察一下服务端得到的信息,竟然发现在flash关闭的时候服务端会得到一个空数据,哈哈,利用这个对所有的客户端返回一个值,就能catch到刚才关闭的客户机:
try
   {
    //MessageBox.Show(message);
    byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message.ToCharArray());
    cl.Sock.Send(buffer,buffer.Length,0);
   }
   catch(Exception)//如果有异常则退出
   {
   }
      毫不客气的Remove掉···
      终于解决了,忍不住自己一个。。。哈哈哈哈哈。。。。。。。。。。。。。。

标签集:TAGS:
回复Comments() 点击Count()

回复Comments

{commenttime}{commentauthor}

{CommentUrl}
{commentcontent}