zoukankan      html  css  js  c++  java
  • 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();
            }
        }
  • 相关阅读:
    洛谷p1017 进制转换(2000noip提高组)
    Personal Training of RDC
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Eurasia
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Peterhof.
    Asia Hong Kong Regional Contest 2019
    XVIII Open Cup named after E.V. Pankratiev. Grand Prix of Siberia
    XVIII Open Cup named after E.V. Pankratiev. Ukrainian Grand Prix.
    XVIII Open Cup named after E.V. Pankratiev. GP of SPb
    卜题仓库
    2014 ACM-ICPC Vietnam National First Round
  • 原文地址:https://www.cnblogs.com/wuxinjian/p/5278186.html
Copyright © 2011-2022 走看看