ASP教程 PHP教程 JSP教程 CGI教程 XML教程
  • ASP.NET教程
  • JAVA教程
    当前位置:教程 > 程序设计 > ASP.NET教程 > 正文

    完整的TCP通信包实现

    编辑:教程网 来源:网络 时间:2011年08月26日 15:53
    using System;

    namespace Jh.Sockets
    {
    /// <summary>
    /// 线程状态信号定义
    /// </summary>
    public enum JhThreadStatus
    {
    Stop, //停止
    Running, //正在运行
    Exit //已退出
    }
    /// <summary>
    /// 线程状态参数
    /// </summary>
    class Parm
    {
    public Parm(object obj):this(JhThreadStatus.Stop,obj)
    {
    }
    public Parm(JhThreadStatus nStatus,object obj)
    {
    Status = nStatus;
    ObjParm = obj;
    }
    JhThreadStatus status;
    object objParm;
    /// <summary>
    /// 上下文对象
    /// </summary>
    public object ObjParm
    {
    get
    {
    return objParm;
    }
    set
    {
    objParm = value;
    }
    }
    /// <summary>
    /// 控制状态
    /// </summary>
    public JhThreadStatus Status
    {
    get
    {
    return status;
    }
    set
    {
    status = value;
    }
    }
    };
    /// <summary>
    /// 通讯数据处理接口
    /// </summary>
    public interface IObserver
    {
    //
    // 数据处理入口
    //
    void Deal(CommData cd);

    //
    // 数据处理重载方法.如果不希望后面的处理者继续处理数据,则返回true,否则返回false;
    //
    bool OnDeal(CommData cd);

    //
    // 附加的自身初始化操作
    //
    bool Init();

    //
    // 提前初始化接口
    //
    bool BeforeInit();

    //
    // 初始化后处理接口
    //
    bool AfterInit();

    //
    // 删除前处理接口
    //
    bool BeforeExit();

    //
    // 下一个观察者
    //
    IObserver Next
    {
    get;
    set;
    }

    //
    // 上一个观察者
    //
    IObserver Prev
    {
    get;
    set;
    }

    //
    // 添加观察者到后面,如果已经存在链表中则不做任何操作
    //
    void Add(IObserver observer);

    //
    // 插入观察者到下一个观察者的前面
    //
    void Insert(IObserver observer);
    //删除观察者
    void Remove(IObserver observer);
    //是否存在链表中
    bool IsExist(IObserver observer);
    }
    /// <summary>
    /// 通讯数据处理类的基类,只能派生
    /// </summary>
    public abstract class Observer : IObserver
    {
    /// <summary>
    /// 数据处理入口.
    /// </summary>
    /// <param name="client">TcpClient类 实例</param>
    /// <param name="s">内存数据流</param>
    public void Deal(CommData cd)
    {
    cd.Data.Position = 0;
    if (OnDeal(cd) == false) return ;
    if (next != null)
    {
    next.Deal(cd);
    }
    return ;
    }

    /// <summary>
    /// 数据处理重载方法.
    /// </summary>
    /// <param name="client">TcpClient类 实例</param>
    /// <param name="s">内存数据流</param>
    /// <returns>处理结果,如果不希望后面的处理者继续处理数据,则返回false,否则返回true;</returns>
    public virtual bool OnDeal(CommData cd)
    {
    return true;
    }

  • 原文来自 教程网 转载请注明:http://www.websmill.com/chengxu/aspnet/19691.html

  • 上一篇:在VS.NET下创建文件上载控件
  • 下一篇:ASP.NET的几种主要文件