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();
            }
        }
  • 相关阅读:
    Flex 布局教程:语法篇
    一些不错的滚动条
    SharePoint缓存导致访问慢解决
    针对SharePointFarm场时安装部署OWA的步骤
    【转】必需知道的 SharePoint 权限 Tips
    【转】SharePoint工作流中常用的方法
    通过SPList Definition自定义ListItem打开编辑详细页面
    Jquery 实现Xml文件内容处理
    【转】为 XmlNode.SelectNodes 加上排序功能
    [MSDN]关键字查询语言 (KQL) 语法参考
  • 原文地址:https://www.cnblogs.com/wuxinjian/p/5278186.html
Copyright © 2011-2022 走看看