当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > 改善C#中socket通信机客户端程序的健壮性

ASP.NET
Check if a File is in Internet Explorers Cache
如何检测电脑是否安装了.net framework
[Regex]Greta不支持“Named Groups”特性
使用子類化的方法來實現VB對特殊消息的響應
C#软件启动设计
C#中虛函數,抽象,接口的簡單説明
TreeView的操作
InteliIM 3.0 will be released soon!
如何將 Visual Basic 與 ADO 搭配使用
建立永遠停留在最上層的窗口(VB)
C#中比较两个值型一维数组变量是否值相等
谈谈软件工程设计的艺术
批量添加Active Directory帐号
文件搜索的实现(深度搜索)
一个图形分割问题[答网友]
XML反串行化Namespace不统一而引起的错误
使用Javascript创建XML文件
突破MsComm控件RThreshold限制,全部数据统统收!
如何制作一个带启动屏幕的窗体
【翻译】Managed DirectX(第五章)

ASP.NET 中的 改善C#中socket通信机客户端程序的健壮性


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 235 ::
收藏到网摘: n/a

    我是做Socket的新手,最近做了一个Socket客户端程序,连接Server的时候,如果server存在,并且允许连接的话,程序无错,正常执行;但是如果Server不存在,或者拒绝连接,程序就会卡住,此时不提示出错。开始我以为是没有Catch异常,但是检查了程序,异常情况都Catch掉了,程序还是卡。

请各位大虾帮忙指正!谢谢,以下是我这个模块的代码!

using System;
using System.Collections;
using System.ComponentModel;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Text;


namespace 测试程序
{
 /// <summary>
 /// ClassClient 的摘要说明。
 /// </summary>
 public class ClassClient
 {
  //方法
  public ClassClient()
  {
   //
   // TODO: 在此处添加构造函数逻辑
   //
  }

  //函数

  #region socket通信机连接函数
  /// <summary>
  /// socket通信机连接函数
  /// </summary>
  /// <param name="remoteEP">远程终端</param>
  /// <param name="client">建立客户端</param>
  public  byte SocketConnect(EndPoint RemoteEP, Socket Client)
  {
   //调用系统连接函数
   Client.BeginConnect(RemoteEP,new AsyncCallback(ConnectCallback), Client );
           
   ConnectDone.WaitOne();
   
   return(1);

   
  }
  #endregion

  #region socket连接返回函数
  /// <summary>
  /// socket连接返回函数
  /// </summary>
  /// <param name="ar">表示异步操作的状态</param>
  private static void ConnectCallback(IAsyncResult ar)
  {
   try
   {
    // 获取socket连接实例
    Socket client = (Socket) ar.AsyncState;

    // 完成连接过程.
    client.EndConnect(ar);

    // 置位连接完成标志
    ConnectDone.Set();
    
    // 得到连接成功信息
    ConnectInfo="连接成功!";
   }
   catch (Exception e)
   {
    // 得到连接失败信息
    ConnectInfo=e.ToString ();

    // 结束连接
    ConnectDone.Reset ();
   }
  }
  #endregion

  #region socket通信机关闭函数
  /// <summary>
  /// socket通信机关闭函数
  /// </summary>
  /// <param name="Client">需关闭的socket通信实例</param>
  public byte SocketClose(Socket Client)
  {
   try
   {
    if (Client!=null)
    {
     //如果仍然产生通信信息,则禁用
     if (Client.Connected) 
     {
      Client.Shutdown(SocketShutdown.Both);
     }
     //关闭socket通信
     Client.Close();

     //获得关闭成功信息
     CloseInfo = "通信机已关闭!";
    }
    return(1);
   }
   catch (Exception e)
   {
    //获得关闭通信失败信息
    CloseInfo = e.ToString();

    return(0);
   }