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

ASP.NET
用 Asp.Net 建立一个在线 RSS 新闻聚合器的方法
关于前台调用后台事件__doPostBack函数
Bin 和 App_Code 文件夹介绍
.NET 2.0 的压缩功能代码
解决Visual Studio 2005 无法显示设计视图的方法
asp.net(c#)两种随机数的算法,可用抽考题
asp.net下url传递中文的解决方案
XmlReader 读取器读取内存流 MemoryStream 的注意事项
asp.net下创建、查询、修改带名称空间的 XML 文件的例子
使用.NET存储XML数据的方法
XslTransform.Transform将结果输出到字符串里的方法
安装 VS2005 SP1 有关问题的解决办法
asp.net下中文验证码,免费开源代码
自定义应用程序配置文件(app.config)
asp.net下使用DIME协议上传文件
动态改变ASP.net页面标题和动态指定页面样式表的方法
WEB上调用HttpWebRequest奇怪问题的解决方法
HTTP协议下用Web Service上传大文件的解决方案
asp.net下Response.ContentType类型汇总
ASP.NET User Control使用技巧一则

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 190 ::
收藏到网摘: 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);
   }