コード例 #1
0
ファイル: Program.cs プロジェクト: xiaomiwk/Cowboy
        private static void ConnectToServer()
        {
            var config = new TcpSocketClientConfiguration();
            //config.UseSsl = true;
            //config.SslTargetHost = "Cowboy";
            //config.SslClientCertificates.Add(new System.Security.Cryptography.X509Certificates.X509Certificate2(@"D:\\Cowboy.cer"));
            //config.SslPolicyErrorsBypassed = false;
            //config.SendTimeout = TimeSpan.FromSeconds(2);

            IPEndPoint remoteEP = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 22222);

            _client = new TcpSocketClient(remoteEP, config);
            _client.ServerConnected += client_ServerConnected;
            _client.ServerDisconnected += client_ServerDisconnected;
            _client.ServerDataReceived += client_ServerDataReceived;
            _client.Connect();
        }
コード例 #2
0
        /// <summary>
        /// 解析、存储、显示数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public static string OnResolveRecvMessage(byte[] b, int c, TcpSocketClient client)
        {
            if (b.Length < 6)
            {
                return("");
            }

            byte typ = b[5];

            //心跳
            if (typ == 0x00)
            {
                byte[] rb = OnResolveHeabert(b, c, client);
                if (rb != null)
                {
                    client.SendBuffer(rb);
                }
            }
            //实时数据
            if (typ == 0x01)
            {
                OnResolveRealData(b, c);
            }
            //身份验证
            if (typ == 0x02)
            {
                AuthenticationDispose(b, c, client);
            }
            //离线数据
            if (typ == 0x03)
            {
                OnResolveRealData(b, c);
                //离线数据应答
                byte[] rb = new byte[12];
                //针头
                rb[0] = 0x7A;
                rb[1] = 0x7A;
                //协议版本号
                rb[2] = 0x01;
                rb[3] = 0x04;
                rb[4] = 0x00;
                //命令字
                rb[5] = 0x03;
                //数据长度
                rb[6] = 0x00;
                rb[7] = 0x00;
                //数据区
                rb[8] = 0x00;
                //校验和
                rb[9]  = 0x00;
                rb[10] = 0x00;
                //结束
                rb[11] = 0x7B;
                rb[12] = 0x7B;
                client.SendBuffer(rb);
            }
            //参数上传(一样)
            if (typ == 0x04)
            {
                byte[] rb = OnResolveParamDataUpload(b, c);
                if (rb != null)
                {
                    client.SendBuffer(rb);
                }
            }
            /*重新整理*/
            if (typ == 0x07) // 设备运行时间
            {
                byte[] rb = OnResolveRunTime(b, c);
                if (rb != null)
                {
                    client.SendBuffer(rb);
                }
            }
            /*再检查一下*/
            if (typ == 0x08) //时间校准
            {
                byte[] rb = OnResolveTime(b, c);
                if (rb != null)
                {
                    client.SendBuffer(rb);
                }
            }
            if (typ == 0x09) //违规运行通知
            {
                OnViolation(b, c, client);
            }
            return(null);
        }
コード例 #3
0
        public async Task TcpSocketClient_ShouldSendReceiveDataSimultaneously(int bufferSize)
        {
            var port = PortGranter.GrantPort();

            TcpSocketListener listener = null;
            TcpSocketClient   socket1  = null;

            // get both ends of a connected socket, with or without buffer
            if (bufferSize != -1)
            {
                listener = new TcpSocketListener(bufferSize);
                socket1  = new TcpSocketClient(bufferSize);
            }
            else
            {
                listener = new TcpSocketListener();
                socket1  = new TcpSocketClient();
            }

            var tcs = new TaskCompletionSource <ITcpSocketClient>();

            await listener.StartListeningAsync(port);

            listener.ConnectionReceived += (sender, args) => tcs.SetResult(args.SocketClient);

            await socket1.ConnectAsync("127.0.0.1", port);

            var socket2 = await tcs.Task;
            await listener.StopListeningAsync();

            // socket1 is the socket from the client end
            // socket2 is the socket from the server end

            // for five seconds, send and receive the data
            var sentToSocket1  = new List <byte>();
            var sentToSocket2  = new List <byte>();
            var recvdBySocket1 = new List <byte>();
            var recvdBySocket2 = new List <byte>();

            // send random data and keep track of it
            // also keep track of what is received
            Func <ITcpSocketClient, List <byte>, List <byte>, CancellationToken, Task> sendAndReceive =
                (socket, sent, recvd, token) =>
            {
                var r    = new Random(socket.GetHashCode());
                var send = Task.Run(async() =>
                {
                    var buf = new byte[1000];
                    while (!token.IsCancellationRequested)
                    {
                        r.NextBytes(buf);
                        sent.AddRange(buf);
                        await socket.WriteStream.WriteAsync(buf, 0, buf.Length, token);
                        await socket.WriteStream.FlushAsync();
                    }
                });

                var recv = Task.Run(async() =>
                {
                    var buf = new byte[1000];
                    while (!token.IsCancellationRequested)
                    {
                        await socket.ReadStream.ReadAsync(buf, 0, buf.Length, token);
                        recvd.AddRange(buf);
                    }
                });

                return(Task.WhenAll(send, recv));
            };

            // let the sockets run for 2.5 seconds
            var cts   = new CancellationTokenSource();
            var timer = Task.Run(() => Task.Delay(TimeSpan.FromSeconds(2.5)).ContinueWith(t => cts.Cancel()));

            var socketRunners =
                Task.WhenAll(
                    Task.Run(() => sendAndReceive(socket1, sentToSocket2, recvdBySocket1, cts.Token)),
                    Task.Run(() => sendAndReceive(socket2, sentToSocket1, recvdBySocket2, cts.Token))
                    );

            await timer;
            await socketRunners;

            Debug.WriteLine("Sent to S1:{0}, Recvd by S1:{1}", sentToSocket1.Count, recvdBySocket1.Count);
            Debug.WriteLine("Sent to S2:{0}, Recvd by S2:{1}", sentToSocket2.Count, recvdBySocket2.Count);

            // zip will join up to the lowest index of both lists (must be recvd)
            // it's ok if recvd is shorter than sent because we cancel abruptly,
            // but we want to be sure that everything that was received matches
            // everything that sent, and that we did both send and receive.

            var socket1OK =
                Enumerable.Zip(sentToSocket1,
                               recvdBySocket1,
                               (s, r) => s == r)
                .All(b => b);

            var socket2OK =
                Enumerable.Zip(sentToSocket1,
                               recvdBySocket1,
                               (s, r) => s == r)
                .All(b => b);

            Assert.True(socket1OK, "Socket1 received data did not match what was sent to it");
            Assert.True(socket2OK, "Socket2 received data did not match what was sent to it");

            // eww, but does the job we need
            Assert.True(recvdBySocket1.Count > 5000, String.Format("Socket 1 received data count was less than 5000 : {0}", recvdBySocket1.Count));
            Assert.True(recvdBySocket2.Count > 5000, String.Format("Socket 2 received data count was less than 5000 : {0}", recvdBySocket2.Count));

            await socket1.DisconnectAsync();

            await socket2.DisconnectAsync();
        }
コード例 #4
0
        /// <summary>
        /// Unlike other methods, this is not always thread-safe.
        /// </summary>
        /// <param name="username">The username.</param>
        /// <param name="password">The password.</param>
        public async Task <bool> LoginAsync(string username, string password)
        {
            if (username == null)
            {
                throw new ArgumentNullException(nameof(username));
            }
            if (password == null)
            {
                throw new ArgumentNullException(nameof(password));
            }
            try
            {
                Events.RaiseLoginPhaseChanged(IgsLoginPhase.Connecting);
                if (!ConnectionEstablished)
                {
                    if (!await ConnectAsync())
                    {
                        return(false);
                    }
                }
                Events.RaiseLoginPhaseChanged(IgsLoginPhase.LoggingIn);
                Composure   = IgsComposure.LoggingIn;
                _username   = username;
                _password   = password;
                _loginError = null;
                ClearConnectionInformation();
                _streamWriter.WriteLine("login");
                _streamWriter.WriteLine(_username);
                _streamWriter.WriteLine(_password);
                await WaitUntilComposureChangesAsync();

                if (Composure == IgsComposure.Confused)
                {
                    await _client.DisconnectAsync();

                    _client = null;
                    Events.RaiseLoginComplete(false);
                    return(false);
                }
                if (_loginError != null)
                {
                    Events.OnIncomingLine("LOGIN ERROR: " + _loginError);
                    Events.RaiseLoginComplete(false);
                    return(false);
                }
                Events.RaiseLoginPhaseChanged(IgsLoginPhase.SendingInitialBurst);
                await MakeRequestAsync("toggle quiet true");
                await MakeRequestAsync("id omegaGo");
                await MakeRequestAsync("toggle newundo true");
                await MakeRequestAsync("toggle verbose false");

                Events.RaiseLoginPhaseChanged(IgsLoginPhase.RefreshingGames);
                await Commands.ListGamesInProgressAsync();

                Events.RaiseLoginPhaseChanged(IgsLoginPhase.RefreshingUsers);
                await Commands.ListOnlinePlayersAsync();

                Events.RaiseLoginPhaseChanged(IgsLoginPhase.Done);
                LoggedIn = true;
                Events.RaiseLoginComplete(true);
                return(true);
            }
            catch
            {
                await DisconnectAsync();

                return(false);
            }
        }
コード例 #5
0
 //参数配置
 //7A 7A 01 00 02 04 32 00 31 32 33 34 35 36 37 38 17 10 31 17 34 00 17 10 31 01 00 01 01 01 00 02 00 03 00 04 00 05 00 06 00 07 00 08 00 09 00 0a 00 0b 00 0c 00 0d 00 31 32 33 D4 18 7b 7b
 //7a 7a 01 00 02 04 00 00 00 00 7b 7b
 static public void ReceiveDispose_ParameterConfig(byte[] data, TcpSocketClient client)
 {
     try
     {
         Frame_ParameterConfig dataFrame = new Frame_ParameterConfig();
         //设备编号
         byte[] sn = new byte[8];   //设备编号
         for (int i = 0; i < 8; i++)
         {
             sn[i] = data[i];
         }
         dataFrame.DeviceNo = Encoding.ASCII.GetString(sn);  //获取设备编号ASCII
         //参数修改时间
         string tStr = ConvertData.ToHexString(data, 8, 6);
         try
         {
             dataFrame.ParameterUpdateTime = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
         }
         catch (Exception)
         {
             dataFrame.ParameterUpdateTime = DateTime.Now;
         }
         //安装时间
         tStr = ConvertData.ToHexString(data, 14, 3);
         try
         {
             dataFrame.InstallDate = DateTime.ParseExact(tStr, "yyMMdd", System.Globalization.CultureInfo.InvariantCulture);
         }
         catch (Exception)
         {
             dataFrame.InstallDate = DateTime.Now;
         }
         //额定载荷
         UShortValue us = new UShortValue();
         us.bValue1           = data[17];
         us.bValue2           = data[18];
         dataFrame.LoadRating = us.sValue;
         //预警系数
         dataFrame.EarlyAlarmCoefficient = data[19];
         //报警系数
         dataFrame.AlarmCoefficient = data[20];
         //空载AD1
         ShortValue s = new ShortValue();
         s.bValue1          = data[21];
         s.bValue2          = data[22];
         dataFrame.EmptyAD1 = s.sValue;
         //空载AD2
         s.bValue1          = data[23];
         s.bValue2          = data[24];
         dataFrame.EmptyAD2 = s.sValue;
         //空载AD3
         s.bValue1          = data[25];
         s.bValue2          = data[26];
         dataFrame.EmptyAD3 = s.sValue;
         //空载AD4
         s.bValue1          = data[27];
         s.bValue2          = data[28];
         dataFrame.EmptyAD4 = s.sValue;
         //空载AD
         s.bValue1         = data[29];
         s.bValue2         = data[30];
         dataFrame.EmptyAD = s.sValue;
         //标准重物AD1
         s.bValue1 = data[31];
         s.bValue2 = data[32];
         dataFrame.StandardLoadAD1 = s.sValue;
         //标准重物AD2
         s.bValue1 = data[33];
         s.bValue2 = data[34];
         dataFrame.StandardLoadAD2 = s.sValue;
         //标准重物AD3
         s.bValue1 = data[35];
         s.bValue2 = data[36];
         dataFrame.StandardLoadAD3 = s.sValue;
         //标准重物AD4
         s.bValue1 = data[37];
         s.bValue2 = data[38];
         dataFrame.StandardLoadAD1 = s.sValue;
         //标准重物AD
         s.bValue1 = data[39];
         s.bValue2 = data[40];
         dataFrame.StandardLoadAD = s.sValue;
         //标准重物
         s.bValue1 = data[41];
         s.bValue2 = data[42];
         dataFrame.StandardLoad = s.sValue;
         //倾角预警值
         s.bValue1 = data[43];
         s.bValue2 = data[44];
         dataFrame.AngleEarlyAlarm = s.sValue;
         //倾角报警值
         s.bValue1            = data[45];
         s.bValue2            = data[46];
         dataFrame.AngleAlarm = s.sValue;
         //软件版本号 ASCII
         byte[] SoftVersion = new byte[data.Length - 47];
         for (int i = 47, j = 0; i < data.Length; i++, j++)
         {
             SoftVersion[j] = data[i];
         }
         dataFrame.SoftVersion = Encoding.ASCII.GetString(SoftVersion);
         //拼接应答
         byte[] result = SendJoint_ParameterConfig(dataFrame);
         if (result != null)
         {
             client.SendBuffer(result);
         }
     }
     catch (Exception)
     { }
 }
コード例 #6
0
        //实时数据
        //7A 7A 01 00 02 01 15 00 31 32 33 34 35 36 37 38 17 10 31 17 34 00 01 00 02 00 03 00 01 15 03 7B 7B
        //有报警7A 7A 01 00 02 01 15 00 31 32 33 34 35 36 37 38 17 10 31 17 34 00 01 00 02 00 03 00 0f DB E2 7B 7B
        static public void ReceiveDispose_Current(byte[] data, TcpSocketClient client, bool isCurrent)
        {
            try
            {
                Zhgd_iot_discharge_current dataFrame = new Zhgd_iot_discharge_current();
                //设备编号
                byte[] sn = new byte[8];   //设备编号
                for (int i = 0; i < 8; i++)
                {
                    sn[i] = data[i];
                }
                dataFrame.sn = Encoding.ASCII.GetString(sn);  //获取设备编号ASCII
                //RTC
                string tStr = ConvertData.ToHexString(data, 8, 6);
                try
                {
                    dataFrame.timestamp = DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture));
                }
                catch (Exception)
                {
                    dataFrame.timestamp = DPC_Tool.GetTimeStamp(DateTime.Now);
                }
                //当前载重
                UShortValue us = new UShortValue();
                us.bValue1       = data[14];
                us.bValue2       = data[15];
                dataFrame.weight = us.sValue;
                //倾角X
                ShortValue s = new ShortValue();
                s.bValue1       = data[16];
                s.bValue2       = data[17];
                dataFrame.dip_x = (double)((double)(s.sValue) / 100d);
                //倾角Y
                s.bValue1       = data[18];
                s.bValue2       = data[19];
                dataFrame.dip_y = (double)((double)(s.sValue) / 100d);
                //报警状态
                string        state = Convert.ToString(data[20], 2).PadLeft(8, '0');
                List <string> vs    = new List <string>();
                dataFrame.is_warning = "N";
                //  dataFrame.WeightWarning = (byte)(state[7] - 48);
                if ((byte)(state[6] - 48) == 1)
                {
                    vs.Add(Warning_type.重量告警); dataFrame.is_warning = "Y";
                }
                //dataFrame.WeightAlarm = (byte)(state[6] - 48);
                // dataFrame.AngleWarning = (byte)(state[5] - 48);
                if ((byte)(state[4] - 48) == 1)
                {
                    vs.Add(Warning_type.重量告警); dataFrame.is_warning = "Y";
                }
                //dataFrame.AngleAlarm = (byte)(state[4] - 48);
                //离线数据应答
                if (!isCurrent)
                {
                    byte[] result = SendJoint_OffLine();
                    if (result != null)
                    {
                        client.SendBuffer(result);
                    }
                }

                //进行数据put
                Discharge_operation.Send_discharge_Current(dataFrame);
            }
            catch (Exception)
            { }
        }
コード例 #7
0
ファイル: DatabaseClient.cs プロジェクト: danchart/Ecs
 public DatabaseClient(ILogger logger, int messageQueueCapacity)
 {
     this._client = new TcpSocketClient(logger, ProtocolConstants.MaxTcpMessageSize, messageQueueCapacity);
 }
コード例 #8
0
        public async Task TcpSocketClient_ShouldSendReceiveDataSimultaneously(int bufferSize)
        {
            var port = PortGranter.GrantPort();

            TcpSocketListener listener = null;
            TcpSocketClient   socket1  = null;

            // get both ends of a connected socket, with or without buffer
            if (bufferSize != -1)
            {
                listener = new TcpSocketListener(bufferSize);
                socket1  = new TcpSocketClient(bufferSize);
            }
            else
            {
                listener = new TcpSocketListener();
                socket1  = new TcpSocketClient();
            }

            var tcs = new TaskCompletionSource <ITcpSocketClient>();

            await listener.StartListeningAsync(port);

            listener.ConnectionReceived += (sender, args) => tcs.SetResult(args.SocketClient);

            await socket1.ConnectAsync("127.0.0.1", port);

            var socket2 = await tcs.Task;
            await listener.StopListeningAsync();

            // socket1 is the socket from the client end
            // socket2 is the socket from the server end

            // for five seconds, send and receive the data
            var sentToSocket1  = new List <byte>();
            var sentToSocket2  = new List <byte>();
            var recvdBySocket1 = new List <byte>();
            var recvdBySocket2 = new List <byte>();

            // send random data and keep track of it
            // also keep track of what is received
            Func <ITcpSocketClient, List <byte>, List <byte>, CancellationToken, Task> sendAndReceive =
                (socket, sent, recvd, token) =>
            {
                var r    = new Random(socket.GetHashCode());
                var send = Task.Run(async() =>
                {
                    var buf = new byte[1000];
                    while (!token.IsCancellationRequested)
                    {
                        r.NextBytes(buf);
                        sent.AddRange(buf);
                        await socket.WriteStream.WriteAsync(buf, 0, buf.Length, token);
                        await socket.WriteStream.FlushAsync(token);
                    }
                });

                var recv = Task.Run(async() =>
                {
                    var buf = new byte[1000];
                    while (!token.IsCancellationRequested)
                    {
                        var len = await socket.ReadStream.ReadAsync(buf, 0, buf.Length, token);
                        recvd.AddRange(buf.Take(len));
                    }
                });

                var innerTcs = new TaskCompletionSource <bool>();
                token.Register(() => innerTcs.SetResult(true));

                return(innerTcs.Task);
            };

            // let the sockets run for 2.5 seconds
            var socketRunners =
                Task.WhenAll(
                    Task.Run(() => sendAndReceive(socket1, sentToSocket2, recvdBySocket1, new CancellationTokenSource(TimeSpan.FromSeconds(2.5)).Token).ContinueWith(t => Debug.WriteLine($"Socket 1 task completed: {t}"))),
                    Task.Run(() => sendAndReceive(socket2, sentToSocket1, recvdBySocket2, new CancellationTokenSource(TimeSpan.FromSeconds(2.5)).Token).ContinueWith(t => Debug.WriteLine($"Socket 2 task completed: {t}")))
                    );

            await socketRunners;

            Debug.WriteLine("Sent to S1:{0}, Recvd by S1:{1}", sentToSocket1.Count, recvdBySocket1.Count);
            Debug.WriteLine("Sent to S2:{0}, Recvd by S2:{1}", sentToSocket2.Count, recvdBySocket2.Count);

            // zip will join up to the lowest index of both lists (must be recvd)
            // it's ok if recvd is shorter than sent because we cancel abruptly,
            // but we want to be sure that everything that was received matches
            // everything that sent, and that we did both send and receive.

            var socket1Errors =
                Enumerable.Zip(recvdBySocket1, sentToSocket1,
                               (r, s) => s == r)
                .Count(b => !b);

            var socket2Errors =
                Enumerable.Zip(recvdBySocket2,
                               sentToSocket2,
                               (r, s) => s == r)
                .Count(b => !b);

            var max = new[] { recvdBySocket1.Count, recvdBySocket2.Count, sentToSocket1.Count, sentToSocket2.Count }.Max();
            Func <List <byte>, int, string> getValueOrStars =
                (bytes, i) => bytes.Count > i ? ((int)bytes[i]).ToString().PadLeft(3, '0') : "***";

            var rows =
                Enumerable.Range(0, max - 1)
                .Select(i =>
            {
                var sTo1 = getValueOrStars(sentToSocket1, i);
                var rBy1 = getValueOrStars(recvdBySocket1, i);
                var sTo2 = getValueOrStars(sentToSocket2, i);
                var rBy2 = getValueOrStars(recvdBySocket2, i);

                return(new { Index = i, SentTo1 = sTo1, ReceivedBy1 = rBy1, SentTo2 = sTo2, ReceivedBy2 = rBy2 });
            })
                .Where(r => (r.SentTo1 != r.ReceivedBy1 && r.ReceivedBy1 != "***") || (r.SentTo2 != r.ReceivedBy2 && r.ReceivedBy2 != "***"))
                .Select(r => $"{r.Index}: \t{r.SentTo1}\t{r.ReceivedBy1}\t{r.SentTo2}\t{r.ReceivedBy2}\t")
                .Take(1000);

            Func <IEnumerable <byte>, string> show = bs => $"[ {String.Join(", ", bs.Take(5).Select(b => (int) b))} ]";

            if (socket1Errors > 0 || socket2Errors > 0)
            {
                Assert.True(socket1Errors == 0,
                            $"Socket1 received {socket1Errors} byte/s that did not match what was sent to it{Environment.NewLine}{String.Join(Environment.NewLine, rows)}");
                Assert.True(socket2Errors == 0,
                            $"Socket2 received {socket2Errors} byte/s that did not match what was sent to it{Environment.NewLine}{String.Join(Environment.NewLine, rows)}");
            }
            // eww, but does the job we need
            Assert.True(recvdBySocket1.Count > 5000, String.Format("Socket 1 received data count was less than 5000 : {0}", recvdBySocket1.Count));
            Assert.True(recvdBySocket2.Count > 5000, String.Format("Socket 2 received data count was less than 5000 : {0}", recvdBySocket2.Count));

            await socket1.DisconnectAsync();

            await socket2.DisconnectAsync();
        }
コード例 #9
0
 void OnConnectCommandExecuted()
 {
     client = new TcpSocketClient(IPAddress.Parse(ServerIpAddress));
     client.Received += new TcpSocketClient.ReceiveHandler(client_Received);
     client.ConnectAsync(UserName,
         () => { IsChatViewVisible = true; },
         error => {
             MessageBox.Show(error);
         }
     );
 }
コード例 #10
0
        /// <summary>
        /// 心跳
        /// </summary>
        /// <param name="b"></param>
        /// <param name="bCount"></param>
        /// <param name="client"></param>
        /// <param name="df"></param>
        /// <returns></returns>
        public static byte[] OnResolveHeabert(byte[] b, int bCount, TcpSocketClient client)
        {
            if (bCount != 0x1A)
            {
                return(null);
            }
            gdust_Heartbeat data = new gdust_Heartbeat();
            string          tStr = ConvertData.ToHexString(b, 0, 2);//获取帧头

            if (tStr != "7A7A")
            {
                return(null);
            }
            byte[] t = new byte[8];
            for (int i = 8, j = 0; i < 16; i++, j++)
            {
                t[j] = b[i];
            }
            data.sn = Encoding.ASCII.GetString(t);
            tStr    = ConvertData.ToHexString(b, 16, 6);//获取时间
            DateTime getdate = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
            DateTime now     = System.DateTime.Now;
            double   compare = (now - getdate).TotalMinutes;

            byte[] bytes = new byte[19];
            if (compare > 1 || compare < 0)  //需要
            {
                bytes = new byte[19];
                //数据长度
                bytes[6] = 0x07;
                bytes[7] = 0x00;
                //////////时间校准标示////
                bytes[8] = 0x01;
                //时间
                bytes[9]  = byte.Parse(now.Year.ToString().Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
                bytes[10] = byte.Parse(now.Month.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[11] = byte.Parse(now.Day.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[12] = byte.Parse(now.Hour.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[13] = byte.Parse(now.Minute.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[14] = byte.Parse(now.Second.ToString(), System.Globalization.NumberStyles.HexNumber);
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 7));
                bytes[15] = crc16[0];//0x00;//算校验和
                bytes[16] = crc16[1];
                //结束
                bytes[17] = 0x7B;
                bytes[18] = 0x7B;
                data.Rtc  = now.ToString("yyyy-MM-dd HH:mm:ss");
            }
            else   //不需要
            {
                bytes = new byte[13];

                //长度 //7A7A0100000001000000007B7B
                bytes[6] = 0x01;
                bytes[7] = 0x00;
                //数据区
                bytes[8] = 0x00;
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 1));
                bytes[9]  = crc16[0];//0x00;//算校验和
                bytes[10] = crc16[1];
                //结束
                bytes[11] = 0x7B;
                bytes[12] = 0x7B;
                data.Rtc  = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture).ToString("yyyy-MM-dd HH:mm:ss");
            }

            bytes[0] = 0x7A;
            bytes[1] = 0x7A;
            //协议版本
            bytes[2] = 0x01;
            bytes[3] = 0x00;
            bytes[4] = 0x04;
            //命令字
            bytes[5] = 0x00;
            //包装

            //更新在线时间
            Dust_noise_operation.Update_equminet_last_online_time(data.sn, DPC.DPC_Tool.GetTimeStamp(DateTime.Now));
            return(bytes);
        }
コード例 #11
0
        /// <summary>
        /// 实时数据
        /// </summary>
        /// <param name="b"></param>
        /// <param name="bCount"></param>
        /// <param name="client"></param>
        /// <param name="df"></param>
        public static void OnResolveCurrent(byte[] b, int bCount, TcpSocketClient client)
        {
            string tStr = ConvertData.ToHexString(b, 0, 2);

            if (tStr != "7A7A")
            {
                return;
            }
            Zhgd_iot_dust_noise_current current = new  Zhgd_iot_dust_noise_current();

            byte[] t = new byte[8];
            for (int i = 8, j = 0; i < 16; i++, j++)
            {
                t[j] = b[i];
            }
            current.sn = Encoding.ASCII.GetString(t);
            tStr       = ConvertData.ToHexString(b, 16, 6);
            try
            {
                current.timestamp = DPC_Tool.GetTimeStamp(DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture));
            }
            catch
            {
                current.timestamp = DPC_Tool.GetTimeStamp(DateTime.Now);
            }
            UShortValue s = new UShortValue();

            s.bValue1 = b[22];
            s.bValue2 = b[23];
            if (s.sValue.ToString() == "0")
            {
                current.pm2_5 = 5;
            }
            else
            {
                current.pm2_5 = s.sValue;
            }
            s.bValue1 = b[24];
            s.bValue2 = b[25];
            if (s.sValue.ToString() == "0")
            {
                current.pm10 = 5;
            }
            else
            {
                current.pm10 = s.sValue;
            }
            s.bValue1              = b[26];
            s.bValue2              = b[27];
            current.noise          = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[28];
            s.bValue2              = b[29];
            current.temperature    = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[30];
            s.bValue2              = b[31];
            current.humidity       = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[32];
            s.bValue2              = b[33];
            current.wind_speed     = double.Parse((float.Parse(s.sValue.ToString()) / 10).ToString("0.0"));
            s.bValue1              = b[34];
            s.bValue2              = b[35];
            current.wind_direction = s.sValue;
            //    current.GprsSignal = ((sbyte)b[36]).ToString();
            // current.automatic = b[37].ToString();
            //current.Manual = b[38].ToString();
            s.bValue1            = b[39];
            s.bValue2            = b[40];
            current.air_pressure = double.Parse((float.Parse(s.sValue.ToString()) / 100).ToString("0.00"));
            s.bValue1            = b[41];
            s.bValue2            = b[42];
            current.tsp          = s.sValue;
            Dust_noise_operation.Send_dust_noise_Current(current);
        }
コード例 #12
0
        public PacketsPage()
        {
            InitializeComponent();

            tcpPort = SettingsPage.TCPPort;
            udpPort = SettingsPage.UDPPort;

            tcpServer = new TcpSocketListener();
            udpServer = new UdpSocketReceiver();

            tcpServer.ConnectionReceived += TcpConnection;
            udpServer.MessageReceived    += UdpConnection;

            Task.Run(async() =>
            {
                await tcpServer.StartListeningAsync(tcpPort);
                await udpServer.StartListeningAsync(udpPort);
                SettingsPage.TCPPort = tcpServer.LocalPort;

                MessagingCenter.Send(this, Events.BOUND_PORTS_CHANGED, 0);
            });


            //udpServer.StartListeningAsync(udpPort);

            /*
             += async (sender, args) =>
             * {
             * var client = args.SocketClient;
             *
             * var bytesRead = -1;
             * var buf = new byte[1];
             *
             * while (bytesRead != 0)
             * {
             *  bytesRead = await args.SocketClient.ReadStream.ReadAsync(buf, 0, 1);
             *  //if (bytesRead > 0)
             *  //    Debug.Write(buf[0]);
             * }
             * };
             */

            _connection = DependencyService.Get <ISQLiteDb>().GetConnection();

            /*
             *          var demopackets = Packet.GetDemoPackets();
             * for (int i = 0; i < demopackets.Count(); i++) {
             *  _thepackets.Add(demopackets[i]);
             * }
             *          packetListView.ItemsSource = _thepackets;
             */


            tcp       = new TcpSocketClient();
            udp       = new UdpSocketClient();
            thepacket = new Packet();

            MessagingCenter.Subscribe <LoginPage, List <Packet> >(this, Events.NEW_PACKET_LIST, OnNewPacketListAsync);
            MessagingCenter.Subscribe <ImportCloud, List <Packet> >(this, Events.NEW_PACKET_LIST, OnNewPacketListAsyncIC);
            MessagingCenter.Subscribe <PacketEditPage, Packet>(this, Events.PACKET_MODIFIED, OnPacketModified);
        }
コード例 #13
0
ファイル: VirtualPhone.cs プロジェクト: wind959/SMGServices
        void OnRead(TcpSocketClient client, byte[] buffers)
        {
            ThreadCalls(() =>
            {
                try
                {
                    var cmd = new BaseCommand(buffers);

                    switch (cmd.Command)
                    {
                    case Commands.Bind_Resp:
                        var bind_resp = new Bind_Resp(buffers);
                        if (bind_resp.Result != CommandError.Success)
                        {
                            PrintLog("绑定验证失败:" + CommandError.GetMessage(bind_resp.Result));
                            Thread.Sleep(1000);
                            client.Disconnect();
                        }
                        break;

                    case Commands.Deliver:
                        var deliver = new Deliver(buffers);
                        //添加接收记录
                        var sms = new SMS
                        {
                            SPNumber   = deliver.SPNumber,
                            UserNumber = deliver.UserNumber,
                            Content    = deliver.MessageContent,
                            Time       = DateTime.Now,
                            Type       = SMSTypes.RECEIVE
                        };
                        SMSHistory.Add(sms);
                        //绑定会话组
                        BindGroup(deliver.SPNumber);
                        //绑定会话
                        if (lbGroup.SelectedItem != null && lbGroup.SelectedItem.ToString() == sms.SPNumber)
                        {
                            BindSession(sms);
                        }
                        else
                        {
                            lbGroup.SelectedItem = deliver.SPNumber;
                            BindSession(deliver.SPNumber);
                        }
                        //新消息提醒
                        PrintLog("收到一条 " + sms.SPNumber + " 发来的新消息!");
                        //发送响应
                        client.Send(new Deliver_Resp
                        {
                            SequenceNumber = deliver.SequenceNumber,
                            Result         = CommandError.Success
                        }.GetBytes());
                        break;

                    case Commands.Deliver_Resp:
                        var deliver_resp = new Deliver_Resp(buffers);
                        if (deliver_resp.Result != CommandError.Success)
                        {
                            PrintLog("传送消息失败:" + CommandError.GetMessage(deliver_resp.Result));
                        }
                        break;

                    default:
                        break;
                    }

                    PrintLog("接收一条命令:" + Commands.GetString(cmd.Command));
                }
                catch (Exception e)
                {
                    PrintLog("读取消息出现错误: " + e.Message);
                }
            });
        }
コード例 #14
0
        public async Task Disconnect()
        {
            await _client.DisconnectAsync();

            _client = null;
        }
コード例 #15
0
        /// <summary>
        /// 身份验证
        /// </summary>
        /// <param name="b"></param>
        /// <param name="c"></param>
        /// <param name="client"></param>
        private static void AuthenticationDispose(byte[] b, int c, TcpSocketClient client)
        {
            List <byte> rb = new List <byte>();

            try
            {
                switch (b[17])
                {
                case 1:
                    byte[] byteTemp = new byte[26];
                    Array.Copy(b, byteTemp, 26);
                    rb.AddRange(byteTemp);
                    rb.Add(1);
                    //长度
                    rb[6] = 19; rb[7] = 0;
                    break;

                case 2:
                    byte[] byteTemp2 = new byte[20];
                    Array.Copy(b, byteTemp2, 20);
                    rb.AddRange(byteTemp2);
                    rb.Add(1);
                    //长度
                    rb[6] = 13; rb[7] = 0;
                    break;

                case 6:    //ZT 20170322
                    byte[] byteTemp6 = new byte[18];
                    Array.Copy(b, byteTemp6, 18);
                    rb.AddRange(byteTemp6);
                    //长度
                    rb[6] = 10; rb[7] = 0;
                    break;

                default: break;
                }
                byte[] byteT = new byte[rb.Count];
                rb.CopyTo(byteT);
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(byteT, 8, rb.Count - 8));
                rb.Add(crc16[0]);
                rb.Add(crc16[1]);
                //结束符
                rb.Add(0x7B);
                rb.Add(0x7B);
                byteT = new byte[rb.Count];
                rb.CopyTo(byteT);
                client.SendBuffer(byteT);

                if (b[17] == 2)
                {
                    rb.Clear();
                    byte[] byteTemp2 = new byte[18];
                    Array.Copy(b, byteTemp2, 18);
                    rb.AddRange(byteTemp2);
                    rb.Add(1);  //验证结果
                    //子命令字
                    rb[17] = 3; //验证结果下发
                    //长度
                    rb[6] = 81; rb[7] = 0;


                    byte[] sn = new byte[8];   //司机卡号
                    for (int l = 20, j = 0; l < 28; l++, j++)
                    {
                        sn[j] = b[l];
                    }
                    //工号
                    rb.AddRange(sn);
                    //卡号
                    rb.AddRange(sn);

                    for (int i = 0; i < 54; i++)
                    {
                        rb.Add(0xff);
                    }

                    byteT = new byte[rb.Count];
                    rb.CopyTo(byteT);
                    crc16 = BitConverter.GetBytes(ConvertData.CRC16(byteT, 8, rb.Count - 8));
                    rb.Add(crc16[0]);
                    rb.Add(crc16[1]);
                    //结束符
                    rb.Add(0x7B);
                    rb.Add(0x7B);
                    byteT = new byte[rb.Count];
                    rb.CopyTo(byteT);
                    client.SendBuffer(byteT);
                }
            }
            catch (Exception) { }
        }
コード例 #16
0
        private async void TestAsync()
        {
            // Testing constants:

            const int MaxPacketSize       = 256;
            const int PacketQueueCapacity = 256;

            const int TestRequestCount       = 10000;
            const int ClientCount            = 5;
            const int ConcurrentRequestCount = 100;

            var logger = new TestLogger();
            var random = new Random();

            // Start TCP server.

            //IPAddress.Parse("127.0.0.1")
            var addressList    = Dns.GetHostEntry("localhost").AddressList;
            var ipAddress      = addressList.First();
            var serverEndpoint = new IPEndPoint(ipAddress, 27005);

            var server = new TcpServer(logger, clientCapacity: 2, maxPacketSize: MaxPacketSize, packetQueueDepth: PacketQueueCapacity);

            server.Start(serverEndpoint, ProcessAsync);

            // TCP clients connecto to server.

            var clients = new TcpSocketClient[ClientCount];

            for (int i = 0; i < clients.Length; i++)
            {
                clients[i] = new TcpSocketClient(logger, maxPacketSize: MaxPacketSize, packetQueueCapacity: PacketQueueCapacity);
                clients[i].Connect(serverEndpoint);
            }

            // Send requests from clients to server.

            logger.Info($"Executing {TestRequestCount:N0} send/receive requests: clientCount={ClientCount}, concurrentRequests={ConcurrentRequestCount}");

            using (var sw = new LoggerStopWatch(logger))
            {
                var tasks         = new List <Task <TcpResponseMessage> >();
                var clientIndices = new List <int>();

                for (int i = 0; i < TestRequestCount; i++)
                {
                    var clientIndex = random.Next() % clients.Length;

                    //if (i % 5000 == 0)
                    if (false && (i % 10000) == (Math.Abs((random.Next()) % 10000)))
                    {
                        clients[clientIndex].Disconnect();

                        clients[clientIndex] = new TcpSocketClient(logger, maxPacketSize: MaxPacketSize, packetQueueCapacity: PacketQueueCapacity);
                        clients[clientIndex].Connect(serverEndpoint);
                    }

                    var client = clients[clientIndex];

                    var requestData = new byte[1024];
                    Serializer.Serialize($"Client data {i}", requestData, out int count);

#if PRINT_DATA
                    Logger.Info($"Client {clientIndex} Sending: {sendMessage}");
#endif //PRINT_DATA

                    tasks.Add(client.SendAsync(requestData, 0, (ushort)count));
                    clientIndices.Add(clientIndex);

                    if (tasks.Count == ConcurrentRequestCount)
                    {
                        var taskSendAll = Task.WhenAll(tasks);

                        await Task.WhenAny(
                            taskSendAll,
                            Task.Delay(250)).ConfigureAwait(false);

                        if (!taskSendAll.IsCompleted)
                        {
                            logger.Error($"Failed to complete all sends: count={tasks.Count()}, failedCount={tasks.Where(x => !x.IsCompleted).Count()}");

                            tasks.Clear();
                            clientIndices.Clear();

                            continue;
                        }

                        foreach (var task in tasks)
                        {
                            var responseData = new byte[1024];

                            Serializer.Deserialize(task.Result.Data, task.Result.Offset, task.Result.Size, out string text);

#if PRINT_DATA
                            Logger.Info($"Client {receivedMessage.ClientId} Receive: {receivedMessage}");
#endif //PRINT_DATA
                        }

                        tasks.Clear();
                        clientIndices.Clear();
                    }

#if PRINT_DATA
                    //Logger.Info($"Client {clientIndex} Receive: {receivedObj}");
#endif //PRINT_DATA
                }
            }

            //Logger.Info("Client counts:");

            //for (int i = 0; i < clients.Length; i++)
            //{
            //    Logger.Info($"Client {i}: {(Processor.ClientCounts.ContainsKey(i) ? Processor.ClientCounts[i] : 0)}");
            //}


            for (int i = 0; i < clients.Length; i++)
            {
                clients[i].Disconnect();
            }

            server.Stop();

            foreach (var trace in logger.Messages)
            {
                Assert.False(
                    trace.Level == TestLogger.LevelEnum.Error,
                    $"TCP error: {trace.Text}");
            }
        }
コード例 #17
0
 protected override void SingletonAwake()
 {
     sendMsgPool  = new List <TcpSendMsg>();
     tcpClient    = new TcpSocketClient(RECEIVE_BUFFER_MAX_SIZE);
     _initialized = true;
 }
コード例 #18
0
        /// <summary>
        /// 数据存储转发的触发
        /// </summary>
        /// <param name="obj"></param>
        //public void DataStorageRelay_trigger(object obj)
        //{
        //    DataStorageRelay(obj);
        //}

        /// <summary>
        /// 数据解析事件触发
        /// </summary>
        /// <param name="byteAry"></param>
        public void DataAnalysis_trigger(byte[] byteAry, int count, TcpSocketClient socketClient)
        {
            DataAnalysis(byteAry, count, socketClient);
        }
コード例 #19
0
        public async Task <IObservable <string> > CreateObservableMessageReceiver(
            Uri uri,
            string origin = null,
            IDictionary <string, string> headers  = null,
            IEnumerable <string> subProtocols     = null,
            bool ignoreServerCertificateErrors    = false,
            TlsProtocolVersion tlsProtocolType    = TlsProtocolVersion.Tls12,
            bool excludeZeroApplicationDataInPong = false,
            CancellationToken token = default(CancellationToken))
        {
            _websocketListener.ExcludeZeroApplicationDataInPong = excludeZeroApplicationDataInPong;
            _subjectConnectionStatus.OnNext(ConnectionStatus.Connecting);
            _innerCancellationTokenSource = new CancellationTokenSource();

            if (token != default(CancellationToken))
            {
                token.Register(() =>
                {
                    _innerCancellationTokenSource.Cancel();
                });
            }

            ITcpSocketClient socketClient = new TcpSocketClient();

            await socketClient.ConnectAsync(
                uri.Host,
                uri.Port.ToString(),
                IsSecureWebsocket(uri),
                _innerCancellationTokenSource.Token,
                ignoreServerCertificateErrors,
                tlsProtocolType);

            if (!socketClient.IsConnected)
            {
                throw new Exception($"Websocket Lite unable to connect to host: {uri.Host}");
            }

            await _webSocketConnectService.ConnectServer(
                uri,
                IsSecureWebsocket(uri),
                token,
                socketClient,
                origin,
                headers,
                subProtocols);

            var observer = Observable.Create <string>(
                obs =>
            {
                var disp = _websocketListener.CreateObservableListener(
                    _innerCancellationTokenSource,
                    socketClient)
                           .Subscribe(
                    str => obs.OnNext(str),
                    ex =>
                {
                    WaitForServerToCloseConnectionAsync().Wait(token);
                    throw ex;
                },
                    () =>
                {
                    WaitForServerToCloseConnectionAsync().Wait(token);
                    obs.OnCompleted();
                });

                return(disp);
            });

            return(observer);
        }
コード例 #20
0
 /// <summary>
 /// Initializes a new instance of the <see cref="TcpConnection" /> class.
 /// </summary>
 /// <param name="useSsl">if set to <c>true</c> the connection is secured using SSL.</param>
 public TcpConnection(bool useSsl)
 {
     _isSecure = useSsl;
     _client   = new TcpSocketClient();
 }
コード例 #21
0
        public async Task Connect(string address, int port)
        {
            client = new TcpSocketClient();

            await client.ConnectAsync(address, port);
        }
コード例 #22
0
        public static string OnResolveRecvMessage(byte[] b, int c, TcpSocketClient client)
        {
            try
            {
                if (c > 12)
                {
                    #region 拆结构
                    string dataHexString = ConvertData.ToHexString(b, 0, c);
                    //头
                    string startFlag = dataHexString.Substring(0, 4);
                    //协议版本号
                    string version = "V" + dataHexString.Substring(4, 1).Replace("0", "") + dataHexString.Substring(5, 1) + "." + dataHexString.Substring(6, 1).Replace("0", "") + dataHexString.Substring(7, 1) + "." + dataHexString.Substring(8, 1).Replace("0", "") + dataHexString.Substring(9, 1);
                    //命令字
                    byte command = b[5];
                    //数据长度
                    short datalength = Convert.ToInt16(dataHexString.Substring(14, 2) + dataHexString.Substring(12, 2), 16);
                    //CRC
                    short crc = Convert.ToInt16(dataHexString.Substring(dataHexString.Length - 8, 2) + dataHexString.Substring(dataHexString.Length - 6, 2), 16);
                    //结束符
                    string endFlag = dataHexString.Substring(dataHexString.Length - 4);
                    //数据域
                    string dataMagStr = dataHexString.Substring(16, datalength * 2);
                    #endregion

                    byte[] dataMagAry = ConvertData.HexToByte(dataMagStr);
                    switch (command)
                    {
                    //心跳
                    case 0x00:
                        ReceiveDispose_Heartbeat(dataMagAry, client);
                        break;

                    //实时数据
                    case 0x01:
                        ReceiveDispose_Current(dataMagAry, client, true);
                        break;

                    //保留
                    case 0x02:
                        break;

                    //离线数据
                    case 0x03:
                        ReceiveDispose_Current(dataMagAry, client, false);
                        break;

                    //参数信息
                    case 0x04:
                        ReceiveDispose_ParameterConfig(dataMagAry, client);
                        break;

                    //保留
                    case 0x06:
                        break;

                    //设备运行时间
                    case 0x07:
                        ReceiveDispose_RunTime(dataMagAry, client);
                        break;

                    //时间校准
                    case 0x08:
                        ReceiveDispose_TimeCalibration(dataMagAry, client);
                        break;

                    default: break;
                    }
                }
                return("");
            }
            catch (Exception ex)
            {
                return("");
            }
        }
コード例 #23
0
 private void btnConnectServer_Click(object sender, EventArgs e)
 {
     client = new TcpSocketClient("192.168.40.125", 9000);
     // client.Open();
 }
コード例 #24
0
    public void InitClient()
    {
        if (PlayerId == 0)
        {
            Settings.Default.ClientPort = port;
            Client = new TcpSocketClient();
            string rep = Client.Connect("127.0.0.1", 1337, MessageReceived, "jpiji");
            //string rep = Client.Connect("192.168.1.23", 1337, MessageReceived, "jpiji");
            //string rep = Client.Connect("192.168.1.31", 1337, MessageReceived, "jpiji");

            Debug.Log("connect " + rep);
            PlayerId = Int32.Parse(rep.Split(':')[1]);
            Team = new List<Pokemon>();
        }
    }
コード例 #25
0
 private void SetSocket(TcpSocketClient socket)
 {
     this.socket = socket;
 }
コード例 #26
0
        /// <summary>
        /// 心跳接收数据
        /// </summary>
        /// <param name="b"></param>
        public static byte[] OnResolveHeabert(byte[] b, int bCount, TcpSocketClient client)//1.2.1
        {
            if (bCount != 0x1A)
            {
                return(null);
            }
            if (BitConverter.ToUInt16(b, 22) != ConvertData.CRC16(b, 8, 14))//检验和
            {
                return(null);
            }
            string tStr = ConvertData.ToHexString(b, 0, 2);//获取帧头

            if (tStr != "7A7A")
            {
                return(null);
            }
            byte[] t = new byte[8];
            for (int i = 8, j = 0; i < 16; i++, j++)
            {
                t[j] = b[i];
            }
            string SN = Encoding.ASCII.GetString(t);

            tStr = ConvertData.ToHexString(b, 16, 6);//获取时间
            DateTime getdate = new DateTime();

            byte[] bytes = new byte[19];
            try
            {
                getdate = DateTime.ParseExact(tStr, "yyMMddHHmmss", System.Globalization.CultureInfo.InvariantCulture);
            }
            catch (Exception ex)
            {
                bytes[0] = 0x7A;
                bytes[1] = 0x7A;
                //协议版本
                bytes[2] = 0x01;
                bytes[3] = 0x04;
                bytes[4] = 0x00;
                //命令字
                bytes[5] = 0x00;

                //数据长度
                bytes[6] = 0x07;
                bytes[7] = 0x00;
                //////////时间校准标示////
                bytes[8] = 0x01;

                DateTime nowTime = DateTime.Now;
                //时间
                bytes[9]  = byte.Parse(nowTime.Year.ToString().Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
                bytes[10] = byte.Parse(nowTime.Month.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[11] = byte.Parse(nowTime.Day.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[12] = byte.Parse(nowTime.Hour.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[13] = byte.Parse(nowTime.Minute.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[14] = byte.Parse(nowTime.Second.ToString(), System.Globalization.NumberStyles.HexNumber);
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 7));
                bytes[15] = crc16[0];//0x00;//算校验和
                bytes[16] = crc16[1];
                //结束
                bytes[17] = 0x7B;
                bytes[18] = 0x7B;

                //更新redis
                DPC.Lift_operation.Update_equminet_last_online_time(SN, DPC_Tool.GetTimeStamp(nowTime));
                return(bytes);
            }

            DateTime now     = System.DateTime.Now;
            double   compare = (now - getdate).TotalMinutes;

            if (compare > 1 || compare < 0)  //需要
            {
                bytes = new byte[19];
                //数据长度
                bytes[6] = 0x07;
                bytes[7] = 0x00;
                //////////时间校准标示////
                bytes[8] = 0x01;
                //时间
                bytes[9]  = byte.Parse(now.Year.ToString().Substring(2, 2), System.Globalization.NumberStyles.HexNumber);
                bytes[10] = byte.Parse(now.Month.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[11] = byte.Parse(now.Day.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[12] = byte.Parse(now.Hour.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[13] = byte.Parse(now.Minute.ToString(), System.Globalization.NumberStyles.HexNumber);
                bytes[14] = byte.Parse(now.Second.ToString(), System.Globalization.NumberStyles.HexNumber);
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 7));
                bytes[15] = crc16[0];//0x00;//算校验和
                bytes[16] = crc16[1];
                //结束
                bytes[17] = 0x7B;
                bytes[18] = 0x7B;
                getdate   = DateTime.Now;
                ToolAPI.XMLOperation.WriteLogXmlNoTail("时间校验V1.4.0", "包内解析时间:" + getdate + "当前时间:" + now);
            }
            else   //不需要
            {
                bytes = new byte[13];

                //长度
                bytes[6] = 0x01;
                bytes[7] = 0x00;
                //数据区
                bytes[8] = 0x00;
                //校验和
                byte[] crc16 = BitConverter.GetBytes(ConvertData.CRC16(bytes, 8, 1));
                bytes[9]  = crc16[0];//0x00;//算校验和
                bytes[10] = crc16[1];
                //结束
                bytes[11] = 0x7B;
                bytes[12] = 0x7B;
            }

            bytes[0] = 0x7A;
            bytes[1] = 0x7A;
            //协议版本
            bytes[2] = 0x01;
            bytes[3] = 0x04;
            bytes[4] = 0x00;
            //命令字
            bytes[5] = 0x00;


            //更新redis
            DPC.Lift_operation.Update_equminet_last_online_time(SN, DPC_Tool.GetTimeStamp(getdate));
            return(bytes);
        }
コード例 #27
0
 public static bool Connect(SimpleSocket simpleSocket)
 {
     ImageComparisonServer = simpleSocket.Socket;
     return(OpenConnection());
 }