• 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();
            }
        }
  • 相关阅读:
    Python之路:堡垒机实例
    Django入门
    阿里云centos安装svn和submin
    发邮件功能
    [Coci2015]Divljak
    [2018多省省队联测]劈配
    [AHOI2009]最小割
    [HAOI2017]新型城市化
    [SDOI2014]LIS
    Loj #2256. 「SNOI2017」英雄联盟
  • 原文地址:https://www.cnblogs.com/wuxinjian/p/5278186.html
Copyright © 2020-2023  润新知