示例#1
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="_client"></param>
 public CommandHandler(AsyncTcpClient _client)
 {
     this._client   = _client;
     _handlerThread = new Thread(HandlerThread);
     _handlerThread.IsBackground = true;
     _handlerThread.Start();
 }
示例#2
0
        void p1_tcp_client_MessageReceived(AsyncTcpClient client, Cmd cmd)
        {
            if (cmd == null || (cmd is HeartBeatCmd))
            {
                return;
            }

            if (!cmd.sender_name.ToLower().Contains("p1"))
            {
                return;
            }

            try
            {
                switch (cmd.id)
                {
                case CmdType.Get_All_Ready_Users_Cmd_Ack: OnGetAllReadyUsersAck(_p1_tcp_client, cmd as GetAllReadyUsersCmdAck); break;

                case CmdType.Get_Changed_Ready_Users_Cmd_Ack: OnGetChangedUsersAck(_p1_tcp_client, cmd as GetChangedReadyUsersCmdAck); break;
                }
            }
            catch (System.Exception ex)
            {
                EzLogger.GlobalLogger.debug(ex.Message);
            }
        }
示例#3
0
 public TcpClientAdapter(AsyncTcpClient tcpClient)
 {
     if (tcpClient != null)
     {
         this.tcpClient = tcpClient;
     }
 }
示例#4
0
        static void Main(string[] args)
        {
            LogFactory.Assign(new ConsoleLogFactory());

            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9999);
            IPEndPoint localEP  = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 9998); // 测试用,可以不指定由系统选择端口

            client          = new AsyncTcpClient(remoteEP, localEP);
            client.Encoding = Encoding.UTF8;
            client.ServerExceptionOccurred += new EventHandler <TcpServerExceptionOccurredEventArgs>(client_ServerExceptionOccurred);
            client.ServerConnected         += new EventHandler <TcpServerConnectedEventArgs>(client_ServerConnected);
            client.ServerDisconnected      += new EventHandler <TcpServerDisconnectedEventArgs>(client_ServerDisconnected);
            client.PlaintextReceived       += new EventHandler <TcpDatagramReceivedEventArgs <string> >(client_PlaintextReceived);
            client.Connect();

            Console.WriteLine("TCP client has connected to server.");
            Console.WriteLine("Type something to send to server...");
            while (true)
            {
                try
                {
                    string text = Console.ReadLine();
                    client.Send(text);
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
            }
        }
示例#5
0
        static void Main(string[] args)
        {
            try
            {
                int responseCount = 0;

                System.Console.WriteLine("Please enter the IP Address of the server, or leave blank for 192.168.1.128: ");
                var ipAddress = System.Console.ReadLine();
                if (string.IsNullOrEmpty(ipAddress))
                {
                    ipAddress = "192.168.1.128";
                }

                var client = new AsyncTcpClient();
                client.DataReceived += (sender, e) => System.Console.WriteLine("{0}: Received from server something of size: {1}", ++responseCount, e.Value.Length);
                client.Connect(IPAddress.Parse(ipAddress), 8080);

                System.Console.WriteLine("Connected!");
                System.Console.ReadKey();
            }
            catch (Exception ex)
            {
                System.Console.WriteLine(ex.Message);
            }
        }
示例#6
0
 private void p1_tcp_client_MessageReceived(AsyncTcpClient client, Cmd cmd)
 {
     if (cmd is HeartBeatCmd)
     {
         return;
     }
 }
示例#7
0
        public ExtendedDisplayViewController() : base("ExtendedDisplayViewController", null)
        {
            this.tcpClient = new AsyncTcpClient();
            this.tcpClient.DataReceived += (sender, args) =>
            {
                var bitmapContainer = JsonConvert.DeserializeObject <BitmapContainer>(args.Value);

                var image = bitmapContainer.EncodedBitmap.ToUIImage();
                if (image != null)
                {
                    UIImage oldImage = null;
                    this.InvokeOnMainThread(() =>
                    {
                        oldImage = imgDisplay.Image;

                        imgDisplay.Image = image;
                    });

                    if (oldImage != null)
                    {
                        oldImage.Dispose();
                    }
                }
            };
        }
示例#8
0
        private static async Task SendCommandAsync(AsyncTcpClient asyncTcpClient, byte[] command)
        {
            await asyncTcpClient.Send(command);

            byte[] crc = new byte[] { GetCrc(command) };
            await asyncTcpClient.Send(crc);
        }
示例#9
0
        /// <summary>
        /// 初始化网络并连接
        /// </summary>
        public static void InitialNetWorkClient()
        {
            //TCPClient初始化
            ControllerServer = new AsyncTcpClient(Parameters.TcpServerHost, Parameters.TcpServerPort);

            //异常事件
            ControllerServer.ServerExceptionOccurred +=
                new EventHandler <TcpServerExceptionOccurredEventArgs>(ControllerServer_ServerExceptionOccurred);

            //已连接到服务器
            ControllerServer.ServerConnected +=
                new EventHandler <TcpServerConnectedEventArgs>(ControllerServer_ServerConnected);

            //与服务器断开连接
            ControllerServer.ServerDisconnected +=
                new EventHandler <TcpServerDisconnectedEventArgs>(ControllerServer_ServerDisconnected);

            //接收到服务器的数据(字符串)
            ControllerServer.PlaintextReceived +=
                new EventHandler <TcpDatagramReceivedEventArgs <string> >(ControllerServer_PlaintextReceived);

            //接收到服务器的数据(字节流)
            ControllerServer.DatagramReceived +=
                new EventHandler <TcpDatagramReceivedEventArgs <byte[]> >(ControllerServer_DatagramReceived);

            //连接服务器
            ControllerServer.Connect();
        }
示例#10
0
        private void CreateTcpClient()
        {
            if (this.tcpClient != null)
            {
                this.tcpClient.Disconnect();
            }

            this.tcpClient = new AsyncTcpClient();
            this.tcpClient.DataReceived += (sender, args) =>
            {
                var bitmapContainer = JsonConvert.DeserializeObject <BitmapContainer>(args.Value);

                var image = bitmapContainer.EncodedBitmap.ToUIImage();
                if (image != null)
                {
                    UIImage oldImage = null;
                    this.InvokeOnMainThread(() =>
                    {
                        oldImage = imgScreenshot.Image;

                        imgScreenshot.Image = image;
                    });

                    if (oldImage != null)
                    {
                        oldImage.Dispose();
                    }
                }
            };
        }
示例#11
0
        /// <summary>
        /// 将一个数据组字节包装成当前的标准数据包
        /// </summary>
        /// <param name="datas"></param>
        /// <param name="client"></param>
        /// <returns></returns>
        public byte[] AssembleBytes(ArraySegment <byte> datas, AsyncTcpClient client)
        {
            if (client.UsedPackageIdentification)
            {
                byte[] clientTypeBytes = new byte[1] {
                    (byte)client.ScadaClientType
                };
                byte[] lengthBytes = BitConverter.GetBytes(Convert.ToInt32(datas.Count));
                int    test_length = BitConverter.ToInt32(lengthBytes, 0);
                byte[] newData     = new byte[datas.Count + client.PackInvalidSize + lengthBytes.Length];
                //构造新包,数据包的长度

                System.Array.Copy(client.HeadPackBytes, 0, newData, 0, client.HeadPackSize);                                                                                               //头部标识
                System.Array.Copy(client.MACBtyes, 0, newData, client.HeadPackSize, client.MACSize);                                                                                       //MAC地址
                System.Array.Copy(clientTypeBytes, 0, newData, client.HeadPackSize + client.MACSize, client.ClientTypeSize);                                                               //标记当前客户端类型
                System.Array.Copy(lengthBytes, 0, newData, client.HeadPackSize + client.ClientTypeSize + client.MACSize, lengthBytes.Length);                                              //实际数据长度
                System.Array.Copy(datas.Array, datas.Offset, newData, client.HeadPackSize + client.ClientTypeSize + client.MACSize + lengthBytes.Length, datas.Count);                     //内容体
                System.Array.Copy(client.TailPackBytes, 0, newData, client.HeadPackSize + client.ClientTypeSize + client.MACSize + datas.Count + lengthBytes.Length, client.TailPackSize); //尾部标识
                return(newData);
            }
            else
            {
                return(datas.ToArray());
            }
        }
示例#12
0
        private void Button_Click(object sender, RoutedEventArgs e)
        {
            tcpClient                          = new AsyncTcpClient(IPAddress.Parse(Settings.IpAddress), Settings.Port);
            tcpClient.Encoding                 = Encoding.UTF8;
            tcpClient.DatagramReceived        += TcpClient_DatagramReceived;
            tcpClient.PropertyChanged         += TcpClient_PropertyChanged;
            tcpClient.ServerDisconnected      += TcpClient_ServerDisconnected;
            tcpClient.ServerExceptionOccurred += TcpClient_ServerExceptionOccurred;

            switch (Settings.DeviceType)
            {
            case DeviceType.W6:
                emulator = new W6Emulator(tcpClient);
                break;

            case DeviceType.V6:
                emulator = new V6Emulator(tcpClient);
                break;

            case DeviceType.CA310:
                throw new NotImplementedException("ca310 emulator is not implemented.");

            default:
                break;
            }
            if (emulator == null)
            {
                return;
            }
            ((TCPCOMMODE)emulator).MessageSent += W6Emulator_MessageSent;
            tcpClient.Connect();
        }
示例#13
0
        static void Main(string[] args)
        {
            try
            {
                cancellationSource = new CancellationTokenSource();
                RemoteServerInfo rsi = new RemoteServerInfo
                {
                    Host = IPAddress.Parse("127.0.0.1"),
                    Port = 900
                };
                AsyncTcpClient client = new AsyncTcpClient();
                //client.OnDataReceived += HandleRecieved;
                client.OnDataReceived = onData;
                client.OnDisconnected = onDisconnect;
                client.OnException    = OnException;
                client.OnException   += OnExceptionStack;
                //client.OnDisconnected += HandleDisconnected;
                client.ConnectAsync(rsi, cancellationSource.Token).ContinueWith(t => client
                                                                                .Recieve(cancellationSource.Token),
                                                                                TaskContinuationOptions.OnlyOnRanToCompletion).Wait();
                Console.WriteLine("here we are");
            }
            catch (System.Exception ex)
            {
                Console.Write(ex.Message);
            }


            Console.Read();
        }
示例#14
0
        private async Task ClientConnected(AsyncTcpClient client, bool isReconnected)
        {
            await Task.Delay(500);

            byte[] bytes = Encoding.UTF8.GetBytes($"Hello, {client.ServerTcpClient.Client.RemoteEndPoint}, my name is Server. Talk to me.");
            await client.Send(new ArraySegment <byte>(bytes, 0, bytes.Length));
        }
示例#15
0
        public async void ConnectDisconnect()
        {
            AsyncTcpClient client = new AsyncTcpClient();
            await client.ConnectAsync(localhost, port);

            Assert.True(client.IsConnected);
            await client.CloseAsync();
        }
示例#16
0
 private void OnGetChangedUsersAck(AsyncTcpClient client, GetChangedReadyUsersCmdAck ack)
 {
     lock (_users_lock)
     {
         //改变显示
         UpdateChangedUsersToDisplay(ack);
     }
 }
示例#17
0
 /// <summary>
 /// 初始化TCP Client
 /// </summary>
 private void InitNetWork()
 {
     client = new AsyncTcpClient(IPAddress.Parse("192.168.31.33"), Constants.SignatureDeviceIPPort);
     client.Connect();
     client.ServerConnected    += new EventHandler <TcpServerConnectedEventArgs>(Connected);
     client.ServerDisconnected += new EventHandler <TcpServerDisconnectedEventArgs>(Disconnected);
     client.PlaintextReceived  += new EventHandler <TcpDatagramReceivedEventArgs <string> >(PlainTextReceived);
     client.DatagramReceived   += new EventHandler <TcpDatagramReceivedEventArgs <byte[]> >(DatagramReceived);
 }
示例#18
0
 private void OnGetAllReadyUsersAck(AsyncTcpClient client, GetAllReadyUsersCmdAck ack)
 {
     lock (_users_lock)
     {
         this._users = ack.users;
         ReplaceAllUsersToDisplay(this._users);
     }
     scroll.Reset();
 }
示例#19
0
 /// <summary>
 /// 初始化TCP Client
 /// </summary>
 private void InitNetWork()
 {
     client = new AsyncTcpClient(IPAddress.Parse(ConfigurationManager.AppSettings["SignatureDeviceIP"]), Constants.SignatureDeviceIPPort);
     client.Connect();
     client.ServerConnected    += new EventHandler <TcpServerConnectedEventArgs>(Connected);
     client.ServerDisconnected += new EventHandler <TcpServerDisconnectedEventArgs>(Disconnected);
     client.PlaintextReceived  += new EventHandler <TcpDatagramReceivedEventArgs <string> >(PlainTextReceived);
     client.DatagramReceived   += new EventHandler <TcpDatagramReceivedEventArgs <byte[]> >(DatagramReceived);
 }
示例#20
0
        public void Run()
        {
            Status = RunStatus.Init;
            if (Setting.Interval < 50)
            {
                Setting.Interval = 50;
            }
            mCount   = 0;
            mClients = new List <BeetleX.Clients.AsyncTcpClient>(Setting.Connection);
            for (int i = 0; i <= 50000 * IPAddress.Length; i++)
            {
                string ip   = IPAddress[i % IPAddress.Length];
                var    port = GetPortResource(ip);

                AsyncTcpClient client = BeetleX.SocketFactory.CreateClient <AsyncTcpClient>(Server.Host, Server.Port);
                client.LocalEndPoint = new IPEndPoint(System.Net.IPAddress.Parse(ip), port.Next());
                if (client.Connect())
                {
                    client.DataReceive = OnClientReceive;
                    ClientToken token = new ClientToken();
                    client.Token = token;
                    mClients.Add(client);
                    mCount++;
                    if (Setting.Mode == "Interval")
                    {
                        token.Node = new LinkedListNode <AsyncTcpClient>(client);
                        mLinks[mCount % mLinks.Count].AddFirst(token.Node);
                    }
                    if (mClients.Count >= Setting.Connection)
                    {
                        Task.Run(() => BeginSend());
                        return;
                    }
                }
                else
                {
                    SocketException se = client.LastError as SocketException;
                    if (se != null)
                    {
                        if (se.ErrorCode == (int)SocketError.AddressNotAvailable ||
                            se.ErrorCode == (int)SocketError.ConnectionRefused ||
                            se.ErrorCode == (int)SocketError.NetworkUnreachable)
                        {
                            Stop();
                            throw se;
                        }
                    }
                }
            }

            if (mClients.Count > 0)
            {
                Task.Run(() => BeginSend());
            }
            return;
        }
示例#21
0
 public ConnectedHiveClient(TcpClient tcpClient)
 {
     this.tcpClient = new AsyncTcpClient
     {
         ServerTcpClient   = tcpClient,
         ConnectedCallback = ClientConnected,
         ReceivedCallback  = MessageRecieved,
         ClosedCallback    = ClientClosed
     };
 }
示例#22
0
 /// <summary>
 /// 连接到服务端
 /// </summary>
 public void ConnectToService()
 {
     client = new AsyncTcpClient(IPAddress.Parse(IP), Port);
     client.ServerConnected         += Client_ServerConnected;         //连接成功
     client.PlaintextReceived       += Client_PlaintextReceived;       //文本接收
     client.DatagramReceived        += Client_DatagramReceived;        //字节接收
     client.ServerDisconnected      += Client_ServerDisconnected;      //断开连接
     client.ServerExceptionOccurred += Client_ServerExceptionOccurred; //
     client.Connect();
 }
示例#23
0
 public void InitializeSocket(string ip, int port, bool isDomain = false)
 {
     mStructCopyer   = new StructCopyer();
     mAsyncTcpClient = new AsyncTcpClient(ip, port, isDomain);
     mAsyncTcpClient.ConnectedEventArgs    += OnConnectedEventArgs;
     mAsyncTcpClient.DisconnectedEventArgs += OnDisconnectedEventArgs;
     mAsyncTcpClient.ExceptionEventArgs    += OnExceptionEventArgs;
     mAsyncTcpClient.DataPacketReceived    += OnDataPacketReceived;
     mAsyncTcpClient.Connect();
 }
示例#24
0
 public void Connect()
 {
     if (IsConnected)
     {
         return;
     }
     lock (mLockConnect)
     {
         if (IsConnected)
         {
             return;
         }
         mWScompletionSource = new TaskCompletionSource <bool>();
         if (mNetClient == null)
         {
             string protocol = Host.Scheme.ToLower();
             if (!(protocol == "ws" || protocol == "wss"))
             {
                 OnConnectResponse(new BXException("protocol error! host must [ws|wss]//host:port"), null);
                 mWScompletionSource.Task.Wait();
             }
             WSPacket wSPacket = new WSPacket
             {
                 WSClient = this
             };
             if (Host.Scheme.ToLower() == "wss")
             {
                 mNetClient = SocketFactory.CreateSslClient <AsyncTcpClient>(wSPacket, Host.Host, Host.Port, SSLAuthenticateName);
                 mNetClient.CertificateValidationCallback = CertificateValidationCallback;
             }
             else
             {
                 mNetClient = SocketFactory.CreateClient <AsyncTcpClient>(wSPacket, Host.Host, Host.Port);
             }
             mNetClient.LittleEndian  = false;
             mNetClient.PacketReceive = OnPacketCompleted;
             mNetClient.ClientError   = OnClientError;
         }
         mDataFrames = new System.Collections.Concurrent.ConcurrentQueue <object>();
         bool isNew;
         if (mNetClient.Connect(out isNew))
         {
             OnWriteConnect();
         }
         else
         {
             OnConnectResponse(mNetClient.LastError, null);
         }
         mWScompletionSource.Task.Wait(5000);
         if (!OnWSConnected)
         {
             throw new TimeoutException($"Connect {Host} websocket server timeout!");
         }
     }
 }
示例#25
0
        /// <summary>
        /// 发送一个下置命令消息到消息列表
        /// </summary>
        /// <param name="command"></param>
        private bool SendNetMQ(IO_COMMANDS command)
        {
            try
            {
                ///获取本地的IP地址
                IPAddress AddressIP = IPAddress.Any;
                foreach (IPAddress _IPAddress in Dns.GetHostEntry(Dns.GetHostName()).AddressList)
                {
                    if (_IPAddress.AddressFamily.ToString() == "InterNetwork")
                    {
                        AddressIP = _IPAddress;
                    }
                }

                TcpData tcpData = new TcpData();
                byte[]  datas   = tcpData.StringToTcpByte(command.GetCommandString(), ScadaTcpOperator.置命令);

                AsyncTcpClient Client = new AsyncTcpClient
                {
                    IPAddress         = AddressIP,
                    Port              = int.Parse(Configs.GetValue("Port")),
                    AutoReconnect     = true,
                    ScadaClientType   = ScadaClientType.WebSystem,
                    ConnectedCallback = async(c, isReconnected) =>
                    {
                        if (!c.IsClosing)
                        {
                            await c.WaitAsync();   // 等待服务器


                            //连接到服务器后向服务器发送心跳握手数据
                        }
                    },
                    ConnectedTimeoutCallback = (c, isReconnected) =>
                    {
                    },
                    ClosedCallback = (c, isReconnected) =>
                    {
                    },

                    ReceivedCallback = (c, count) =>
                    {
                        return(Task.CompletedTask);
                    }
                };
                Client.RunAsync().GetAwaiter();
                Client.Send(new ArraySegment <byte>(datas));
                return(true);
            }
            catch
            {
                return(false);
            }
        }
示例#26
0
 public void Start()
 {
     try
     {
         tcpClient = new AsyncTcpClient(new IPEndPoint(IPAddress.Parse(this._ip), this._port), _message, new AlgorithmCodecBuilder());
         tcpClient.Connect().Wait();
     }
     catch (Exception ex)
     {
     }
 }
示例#27
0
 private void startTCP()
 {
     if (!isStartTcp)
     {
         LogTool.Log("服务器连接成功" + serverPoint);
         asyncTcpClient = new AsyncTcpClient();
         asyncTcpClient.Connet(serverPoint);
         asyncTcpClient.OnReceived += AsyncClientReceived;
         isStartTcp = true;
     }
 }
示例#28
0
 public async Task OnServerDataReceived(AsyncTcpClient client, byte[] data, int offset, int count)
 {
     if (data == null)
     {
         return;
     }
     if (data.Length < 2)
     {
         return;
     }
     await this.OnMessage(data[0], data.Skip(1).Take(data.Length - 1).ToArray());
 }
示例#29
0
        /// <summary>
        /// 停止
        /// </summary>
        public async void Stop()
        {
            if (Client != null)
            {
                await Task.Delay(2 * 1000);

                Client.Disconnect();
                Task.WaitAll(TaskManager.ToArray());
                Client.Dispose();
                Client = null;
                GC.Collect();
            }
        }
示例#30
0
        public async Task Connect()
        {
            _tcpClient = new AsyncTcpClient()
            {
                AutoReconnect     = true,
                HostName          = _address,
                Port              = _port,
                ConnectedCallback = ClientConnected,
                ReceivedCallback  = ClientReceived
            };

            await _tcpClient.RunAsync();
        }
示例#31
0
 private void btnLogin_Click(object sender, RoutedEventArgs e)
 {
     client = new AsyncTcpClient(txtIpAddress.Text, remotePort);
     client.Encoding = Encoding.UTF8;
     //当收到服务器端文本数据的时候
     client.PlaintextReceived += new EventHandler<ReceivedEventArgs<string>>(client_PlaintextReceived);
     client.Connect();
     System.Threading.Thread.Sleep(1000);
     if (client.Connected)
     {
         btnExit.IsEnabled = true;
         btnLogin.IsEnabled = false;
         timer_current.Start();
         lblStatus.Content = "已成功链接到服务器。";
         btnUserLogin.IsEnabled = true;
     }
 }