你的位置:首页 > ASP.net教程

[ASP.net教程]TcpClient


public class TcpClientSession  {    protected TcpClient Client { get; set; }    /// <summary>    /// 远程地址    /// </summary>    protected IPEndPoint RemoteEndPoint { get; set; }    /// <summary>    /// 是否已经连接    /// </summary>    public bool IsConnected { get; private set; }    /// <summary>    /// 接收缓存区大小    /// </summary>    public int ReceiveBufferSize = 1024;    /// <summary>    /// 数据流对象    /// </summary>    protected NetworkStream _NetStream;    /// <summary>    /// 已连接事件    /// </summary>    public event Action OnConnected;    /// <summary>    /// 断开事件    /// </summary>    public event Action OnClosed;    public TcpClientSession(IPEndPoint remoteEndPoint)    {      if (remoteEndPoint == null)        throw new ArgumentNullException("remoteEndPoint");      RemoteEndPoint = remoteEndPoint;    }    public TcpClientSession(string server, int port)    {      if (server != null && port > 0)      {        if (!Regex.IsMatch(server, @"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})"))        {          try          {            IPHostEntry ipHostEntry = System.Net.Dns.GetHostEntry(server);            server = ipHostEntry.AddressList[0].ToString();          }          catch (Exception)          {            throw new ArgumentNullException("远程IP地址或域名不正确");          }        }        RemoteEndPoint = new IPEndPoint(IPAddress.Parse(server), port);      }      else        throw new ArgumentNullException("remoteEndPoint");    }    public void Connect()    {      Client = new TcpClient(RemoteEndPoint.AddressFamily);      Client.ReceiveBufferSize = ReceiveBufferSize;      Client.Connect(RemoteEndPoint);      if (Client.Client.Connected)      {        _NetStream = Client.GetStream();        IsConnected = true;        if (this.OnConnected != null)          OnConnected();      }      else        throw new Exception("Unable to connect to a remote device");    }    public byte[] Received()    {      if (Client.Client.Connected)      {        byte[] buffer = null;        buffer = new byte[ReceiveBufferSize];        _NetStream.Read(buffer, 0, buffer.Length);        return buffer;      }      else      {        Close();      }      return null;    }    public void Send(byte[] bs)    {      if (Client.Client.Connected)      {        _NetStream.Write(bs, 0, bs.Length);      }      else      {        Close();      }    }    public void Close()    {      if (Client.Client.Connected)      {        Client.Close();        _NetStream.Close();      }      IsConnected = false;      if (this.OnClosed != null)        OnClosed();    }  }