TCP客户端

TCP客户端

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net.Sockets;
using System.Net;
using System.Threading;
using System.IO;

namespace TCPPhoto
{
    public partial class CNET_L1 : Form
    {
        //创建 1个客户端套接字 和1个负责监听服务端请求的线程
        Thread threadclient = null;
        Socket socketclient = null;
        List<IPEndPoint> mlist = new List<IPEndPoint>();
        FileJPEG fj = new FileJPEG();
        SplitPack sp = new SplitPack();
        Pack IsPack = new Pack();
        public CNET_L1()
        {
            Control.CheckForIllegalCrossThreadCalls = false;
            InitializeComponent();
        }
        //连接
        private void Connect_Click(object sender, EventArgs e)
        {
            //SocketException exception;
            //this.tbx_Pic.Enabled = false;
            //定义一个套接字监听
            socketclient = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

            //获取文本框中的IP地址
            IPAddress address = IPAddress.Parse(IPAdd.Text.Trim());

            //将获取的IP地址和端口号绑定在网络节点上
            IPEndPoint point = new IPEndPoint(address, int.Parse(tbxPort.Text.Trim()));

            try
            {
                //客户端套接字连接到网络节点上,用的是Connect
                socketclient.Connect(point);
                Messages(tbx_Show, GetCurrentTime() + "连接成功");
                threadclient = new Thread(recv);
                threadclient.IsBackground = true;
                threadclient.Start();
            }
            catch (Exception )
            {
                Messages(tbx_Show, GetCurrentTime() + "连接失败");
                return;
            }
        }

        // 接收服务端发来信息的方法  
        private void recv()
        {
           // f0:aa:aa:aa:aa:aa:aa:f1:0d:00:87:00:03:00:11:00:00:00:00:00:00:00:fe
            //int x = 0;
            while (true)//持续监听服务端发来的消息
            {
                try
                {
                    //定义一个1M的内存缓冲区,用于临时性存储接收到的消息
                    byte[] arrRecvmsg = new byte[1024 * 1024*2];
                    //将客户端套接字接收到的数据存入内存缓冲区,并获取长度
                    int bytesRead = socketclient.Receive(arrRecvmsg, arrRecvmsg.Length, 0);
                    byte[] data = new byte[bytesRead];
                    for (int j = 0; j < bytesRead; j++)
                    {
                        data[j] = arrRecvmsg[j];
                    }
                    //int length = socketclient.Receive(arrRecvmsg);
                    if (bytesRead >= 0)
                    {
                        DefaultReceived(data);
                    }
                    //将套接字获取到的字符数组转换为人可以看懂的字符串
                    //string strRevMsg = BitConverter.ToString(data).Replace("-","");
                    //if (x == 1)
                    //{
                    //    DataMsg(tbx_Data, GetCurrentTime() + "服务器:" + " " + strRevMsg + "\r\n");
                    //}
                    //else
                    //{
                    //    DataMsg(tbx_Data, GetCurrentTime() + "服务器:" +" "+ strRevMsg + "\r\n");
                    //    x = 1;
                    //}
                }
                catch (Exception)
                {
                    Messages(tbx_Show, GetCurrentTime() + "远程服务器已经断开连接" + "\r\n");
                    break;
                }
            }
        }
        public void DefaultReceived(object s)
        {
            byte[] CompareByte = (byte[])s;
            string i = CompareByte[10].ToString("X");
            //拍照命令F0AAAAAAAAAAAAF10D00870002001100000000000000FE
            if (CompareByte.Length == 23 && CompareByte[10].ToString("X") == "87" && CompareByte[11] == 0)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端发送拍照命令");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端发送拍照命令:" + " " + BitConverter.ToString(CompareByte) + "\r\n");
                //确认帧
                byte[] Confirm = BytesConvert.bytesConvert(StrToBytes.StringToBytes(OrderControl.OrderAddOne(CompareByte).ToString().Replace(" ", ""), 2));
                byte[] DataBytes = new byte[] { 0xF0, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xF1, 0x09, 0x00, 0x41, 0x00, Confirm[0], Confirm[1], CompareByte[12], CompareByte[13], 0x00, 0x00, 0xFE };
                
                socketclient.Send(DataBytes);
                Messages(tbx_Show, GetCurrentTime() + "服务端发送确认帧");
                DataMsg(tbx_Data, GetCurrentTime() + "客户端发送确认帧:" + " " + BitConverter.ToString(DataBytes) + "\r\n");
            }
            //读取集中器信息
            else if (CompareByte.Length == 18 && CompareByte[10].ToString("X") == "82" && CompareByte[11] == 0 && CompareByte[14] == 0)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端读取集中器信息");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取集中器信息:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");
                int Order = OrderControl.OrderAddOne(CompareByte);//帧序号+1

                byte[] DataBytes = IsPack.ReponseFocusPacks(1, cbx_FocusAddr.Text.ToString().Replace(" ", ""), GetCurrentTime(), Order);
                socketclient.Send(DataBytes);///F0AAAAAAAAAAAAF1080082001100010000FE
                Messages(tbx_Show, GetCurrentTime() + "客户端集中器信息");
                DataMsg(tbx_Data, GetCurrentTime() + "客户端发送集中器信息:" + " " + BitConverter.ToString(DataBytes).Replace("-", "") + "\r\n");
            }
            //读取照相机信息F0AAAAAAAAAAAAF1080082001B00010000FE
            else if (CompareByte.Length == 18 && CompareByte[10].ToString("X") == "82" && CompareByte[11] == 0 && CompareByte[14] == 1)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端读取照相机信息");
                int Order = OrderControl.OrderAddOne(CompareByte);//帧序号+1
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取照相机信息:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");

                byte[] SendDataBytes = IsPack.ReponsePhotoPacks(Convert.ToInt16(cbx_PNum.Text.ToString()), cbx_PAddr, Order);
                socketclient.Send(SendDataBytes);///
                Messages(tbx_Show, GetCurrentTime() + "客户端应答照相机信息");//F0AAAAAAAAAAAA F111004300020001010B000000000003195E6AFE
                DataMsg(tbx_Data, GetCurrentTime() + "客户端应答照相机信息:" + " " + BitConverter.ToString(SendDataBytes).Replace("-", "") + "\r\n");
            }
            //读取新照片信息
            else if (CompareByte.Length == 23 && CompareByte[10].ToString("X") == "88" && CompareByte[11] == 0)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端开始读取新照片信息");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取新照片信息:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");
                //DataMsg(tbx_Data, "客户端" + ": " + GetCurrentTime() + " " + "发送命令" + "\r\n\n" + BitConverter.ToString(DataBytes) + "\r\n");
                //发送有新照片信息
                FileInfo fi = new FileInfo(Application.StartupPath + @"\20171227132710065_010000000000_11.jpeg");
                //读取拍照时间
                DateTime dt = fi.CreationTime;
                long logosize = fi.Length;//读取照片文件的大小
                int Order = OrderControl.OrderAddOne(CompareByte);//帧序号+1

                byte[] SendDataBytes = IsPack.ReponseNewPhotoPacks(cbx_PAddr, 1, 11, dt, logosize, Order);
                socketclient.Send(SendDataBytes);
                // byte[] picSend = fj.Read(Application.StartupPath + @"\20171227132710065_010000000000_11.jpeg");//读取照片的数据量大小
                Messages(tbx_Show, GetCurrentTime() + "客户端发送响应有新照片信息");
                DataMsg(tbx_Data, GetCurrentTime() + "客户端应答新照片信息:" + " " + BitConverter.ToString(SendDataBytes) + "\r\n");
            }
            //服务端读整张照片的数据
            else if (CompareByte.Length == 25 && CompareByte[10].ToString("X") == "8D" && CompareByte[11] == 0)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端读取整张照片数据");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取整张照片数据:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");
               
                byte[] picSend = fj.Read(Application.StartupPath + @"\20171227132710065_010000000000_11.jpeg");
                string test = BitConverter.ToString(picSend).Replace("-","");
                //Image picImage = fj.BytesToImage(picSend);//将照片数据转化为图片
                //pic_Image.Image = picImage;//将照片放到PictureBox中
                int Order = OrderControl.OrderAddOne(CompareByte);//帧序号+1
                sp.Sends(socketclient, cbx_PAddr, tbx_Data, 4096, picSend, Order);
                Messages(tbx_Show, GetCurrentTime() + "客户端成功发送整张照片" + "\r\n");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取整张照片数据完成" + "\r\n");
            }
            //服务端重传照片申请数据
            else if (CompareByte.Length == 25 && CompareByte[10].ToString("X") == "8F" && CompareByte[11] == 0)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端申请重传照片");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端申请重传照片:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");

                byte[] picSend = fj.Read(Application.StartupPath + @"\20171227132710065_010000000000_11.jpeg");
                //Image picImage = fj.BytesToImage(picSend);//将照片数据转化为图片
                //pic_Image.Image = picImage;//将照片放到PictureBox中
                int Order = OrderControl.OrderAddOne(CompareByte);//帧序号+1
                sp.Sends(socketclient, cbx_PAddr, tbx_Data, 4096, picSend, Order);
                Messages(tbx_Show, GetCurrentTime() + "客户端成功发送整张照片" + "\r\n");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取整张照片数据完成" + "\r\n");
            }
            //传输升级文件
            else if (CompareByte[10].ToString("X") == "83" && CompareByte[11] == 0 && CompareByte[CompareByte.Length-1].ToString("X") == "FE")
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端传输升级文件");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端传输升级文件:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");

                
                
                Messages(tbx_Show, GetCurrentTime() + "客户端成功发送整张照片" + "\r\n");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端读取整张照片数据完成" + "\r\n");
            }
            //删除命令F0 AAAAAAAAAAAA F1 0F00 8A00 1000 110000000000 0B00 0000 FE
            else if (CompareByte.Length == 25 && CompareByte[10].ToString("X") == "8A" && CompareByte[11] == 0)
            {
                //F0-AA-AA-AA-AA-AA-AA-F1-09-00-41-00-01-00-00-00-00-00-FE
                Messages(tbx_Show, GetCurrentTime() + "服务端发送删除新照片");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端发送删除新照片:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");
                //确认帧
                Thread.Sleep(2000);
                byte[] Confirm = BytesConvert.bytesConvert(StrToBytes.StringToBytes(OrderControl.OrderAddOne(CompareByte).ToString().Replace(" ", ""), 2));
                byte[] DataBytes = new byte[] { 0xF0, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xF1, 0x09, 0x00, 0x41, 0x00, Confirm[0], Confirm[1], CompareByte[12], CompareByte[13], 0x00, 0x00, 0xFE };
                
                socketclient.Send(DataBytes);
                Messages(tbx_Show, GetCurrentTime() + "客户端应答删除命令");
                DataMsg(tbx_Data, GetCurrentTime() + "客户端发送确认帧:" + " " + BitConverter.ToString(DataBytes).Replace("-", "") + "\r\n");
            }
            //读取一包照片数据
            else if (CompareByte.Length == 31 && CompareByte[10].ToString("X") == "8B" && CompareByte[11] == 0)
            {
                Messages(tbx_Show, GetCurrentTime() + "服务端发送读取一包照片数据");
                DataMsg(tbx_Data, GetCurrentTime() + "服务端发送读取一包照片数据:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");


                //byte[] picSend = fj.Read(Application.StartupPath + @"\20171227132710065_010000000000_11.jpeg");
                ////Image picImage = fj.BytesToImage(picSend);//将照片数据转化为图片
                ////pic_Image.Image = picImage;//将照片放到PictureBox中
                //int Order = OrderControl.OrderAddOne(CompareByte);//帧序号+1
                //sp.Sends(socketclient, cbx_PAddr, tbx_Data, 4096, picSend, Order);
                Messages(tbx_Show, GetCurrentTime() + "客户端传输一包照片数据");
                //DataMsg(tbx_Data, GetCurrentTime() + "客户端传输一包照片数据:" + " " + BitConverter.ToString(DataBytes).Replace("-", "") + "\r\n");
            }
            else
            {
                DataMsg(tbx_Data, GetCurrentTime() + "无效命令:" + " " + BitConverter.ToString(CompareByte).Replace("-", "") + "\r\n");

                Messages(tbx_Show, GetCurrentTime() + "无效命令");
            }
        }

        //获取当前系统时间
        private DateTime GetCurrentTime()
        {
            DateTime currentTime = new DateTime();
            currentTime = DateTime.Now;
            return currentTime;
        }
        //断开
        private void DisConnect_Click(object sender, EventArgs e)
        {
            if (socketclient.Connected && socketclient != null)
            {
                socketclient.Shutdown(SocketShutdown.Both);
                socketclient.Close(); 
            }
        }


        public delegate void MessageDelegate(TextBox txtbox, string Messages);//委托文本框
        //文本框Invoke方法需要创建一个委托。你可以事先写好函数和与之对应的委托
        private void Messages(TextBox txtbox, string message)
        {
            if (txtbox.InvokeRequired)//示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。
            {
                MessageDelegate showMessageDelegate = Messages;
                txtbox.Invoke(showMessageDelegate, new object[] { txtbox, message });
            }
            else
            {
                tbx_Show.Text += message + "\r\n";
            }
        }
        //文本框Invoke方法需要创建一个委托。你可以事先写好函数和与之对应的委托
        private void DataMsg(TextBox txtbox, string message)
        {
            if (txtbox.InvokeRequired)//示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。
            {
                MessageDelegate showMessageDelegate = DataMsg;
                txtbox.Invoke(showMessageDelegate, new object[] { txtbox, message });
            }
            else
            {
                tbx_Data.Text += message + "\r\n";
            }
        }
    }
}

namespace TCPPhoto
{
    partial class CNET_L1
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows Form Designer generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            this.tbxPort = new System.Windows.Forms.TextBox();
            this.IPAdd = new System.Windows.Forms.TextBox();
            this.label225 = new System.Windows.Forms.Label();
            this.label226 = new System.Windows.Forms.Label();
            this.DisConnect = new System.Windows.Forms.Button();
            this.Connect = new System.Windows.Forms.Button();
            this.tbx_Show = new System.Windows.Forms.TextBox();
            this.tbx_Data = new System.Windows.Forms.TextBox();
            this.label1 = new System.Windows.Forms.Label();
            this.label2 = new System.Windows.Forms.Label();
            this.cbx_PAddr = new System.Windows.Forms.ComboBox();
            this.cbx_FocusAddr = new System.Windows.Forms.ComboBox();
            this.label3 = new System.Windows.Forms.Label();
            this.label4 = new System.Windows.Forms.Label();
            this.cbx_PNum = new System.Windows.Forms.ComboBox();
            this.comboBox2 = new System.Windows.Forms.ComboBox();
            this.SuspendLayout();
            // 
            // tbxPort
            // 
            this.tbxPort.Location = new System.Drawing.Point(255, 17);
            this.tbxPort.Name = "tbxPort";
            this.tbxPort.Size = new System.Drawing.Size(100, 21);
            this.tbxPort.TabIndex = 17;
            this.tbxPort.Text = "1235";
            // 
            // IPAdd
            // 
            this.IPAdd.Location = new System.Drawing.Point(61, 17);
            this.IPAdd.Name = "IPAdd";
            this.IPAdd.Size = new System.Drawing.Size(130, 21);
            this.IPAdd.TabIndex = 16;
            this.IPAdd.Text = "192.168.20.160";
            // 
            // label225
            // 
            this.label225.AutoSize = true;
            this.label225.Location = new System.Drawing.Point(208, 21);
            this.label225.Name = "label225";
            this.label225.Size = new System.Drawing.Size(47, 12);
            this.label225.TabIndex = 15;
            this.label225.Text = "端口号:";
            // 
            // label226
            // 
            this.label226.AutoSize = true;
            this.label226.Location = new System.Drawing.Point(8, 21);
            this.label226.Name = "label226";
            this.label226.Size = new System.Drawing.Size(47, 12);
            this.label226.TabIndex = 14;
            this.label226.Text = "IP地址:";
            // 
            // DisConnect
            // 
            this.DisConnect.Location = new System.Drawing.Point(442, 16);
            this.DisConnect.Name = "DisConnect";
            this.DisConnect.Size = new System.Drawing.Size(75, 23);
            this.DisConnect.TabIndex = 13;
            this.DisConnect.Text = "断开";
            this.DisConnect.UseVisualStyleBackColor = true;
            this.DisConnect.Click += new System.EventHandler(this.DisConnect_Click);
            // 
            // Connect
            // 
            this.Connect.Location = new System.Drawing.Point(361, 16);
            this.Connect.Name = "Connect";
            this.Connect.Size = new System.Drawing.Size(75, 23);
            this.Connect.TabIndex = 12;
            this.Connect.Text = "连接";
            this.Connect.UseVisualStyleBackColor = true;
            this.Connect.Click += new System.EventHandler(this.Connect_Click);
            // 
            // tbx_Show
            // 
            this.tbx_Show.Location = new System.Drawing.Point(451, 57);
            this.tbx_Show.Multiline = true;
            this.tbx_Show.Name = "tbx_Show";
            this.tbx_Show.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.tbx_Show.Size = new System.Drawing.Size(436, 351);
            this.tbx_Show.TabIndex = 19;
            // 
            // tbx_Data
            // 
            this.tbx_Data.Dock = System.Windows.Forms.DockStyle.Bottom;
            this.tbx_Data.Location = new System.Drawing.Point(0, 414);
            this.tbx_Data.Multiline = true;
            this.tbx_Data.Name = "tbx_Data";
            this.tbx_Data.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
            this.tbx_Data.Size = new System.Drawing.Size(887, 114);
            this.tbx_Data.TabIndex = 24;
            // 
            // label1
            // 
            this.label1.AutoSize = true;
            this.label1.Location = new System.Drawing.Point(8, 58);
            this.label1.Name = "label1";
            this.label1.Size = new System.Drawing.Size(65, 12);
            this.label1.TabIndex = 26;
            this.label1.Text = "摄像头地址";
            // 
            // label2
            // 
            this.label2.AutoSize = true;
            this.label2.Location = new System.Drawing.Point(8, 138);
            this.label2.Name = "label2";
            this.label2.Size = new System.Drawing.Size(65, 12);
            this.label2.TabIndex = 28;
            this.label2.Text = "集中器地址";
            // 
            // cbx_PAddr
            // 
            this.cbx_PAddr.FormattingEnabled = true;
            this.cbx_PAddr.Items.AddRange(new object[] {
            "130000000000"});
            this.cbx_PAddr.Location = new System.Drawing.Point(77, 56);
            this.cbx_PAddr.Name = "cbx_PAddr";
            this.cbx_PAddr.Size = new System.Drawing.Size(103, 20);
            this.cbx_PAddr.TabIndex = 29;
            this.cbx_PAddr.Text = "130000000000";
            // 
            // cbx_FocusAddr
            // 
            this.cbx_FocusAddr.FormattingEnabled = true;
            this.cbx_FocusAddr.Items.AddRange(new object[] {
            "010203040506"});
            this.cbx_FocusAddr.Location = new System.Drawing.Point(77, 137);
            this.cbx_FocusAddr.Name = "cbx_FocusAddr";
            this.cbx_FocusAddr.Size = new System.Drawing.Size(103, 20);
            this.cbx_FocusAddr.TabIndex = 30;
            this.cbx_FocusAddr.Text = "010203040506";
            // 
            // label3
            // 
            this.label3.AutoSize = true;
            this.label3.Location = new System.Drawing.Point(8, 98);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(65, 12);
            this.label3.TabIndex = 31;
            this.label3.Text = "摄像头个数";
            // 
            // label4
            // 
            this.label4.AutoSize = true;
            this.label4.Location = new System.Drawing.Point(8, 178);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(65, 12);
            this.label4.TabIndex = 33;
            this.label4.Text = "集中器个数";
            this.label4.Visible = false;
            // 
            // cbx_PNum
            // 
            this.cbx_PNum.FormattingEnabled = true;
            this.cbx_PNum.Items.AddRange(new object[] {
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "10",
            "11",
            "12",
            "13",
            "14",
            "15",
            "16",
            "17",
            "1",
            "19",
            "20",
            "21",
            "22",
            "23",
            "24",
            "25",
            "26",
            "27",
            "28",
            "29",
            "30"});
            this.cbx_PNum.Location = new System.Drawing.Point(77, 95);
            this.cbx_PNum.Name = "cbx_PNum";
            this.cbx_PNum.Size = new System.Drawing.Size(103, 20);
            this.cbx_PNum.TabIndex = 34;
            this.cbx_PNum.Text = "1";
            // 
            // comboBox2
            // 
            this.comboBox2.FormattingEnabled = true;
            this.comboBox2.Items.AddRange(new object[] {
            "1",
            "2",
            "3",
            "4",
            "5",
            "6",
            "7",
            "8",
            "9",
            "10",
            "11",
            "12",
            "13",
            "14",
            "15",
            "16",
            "17",
            "1",
            "19",
            "20",
            "21",
            "22",
            "23",
            "24",
            "25",
            "26",
            "27",
            "28",
            "29",
            "30",
            "31",
            "32",
            "33",
            "34"});
            this.comboBox2.Location = new System.Drawing.Point(77, 175);
            this.comboBox2.Name = "comboBox2";
            this.comboBox2.Size = new System.Drawing.Size(103, 20);
            this.comboBox2.TabIndex = 35;
            this.comboBox2.Text = "1";
            this.comboBox2.Visible = false;
            // 
            // CNET_L1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(887, 528);
            this.Controls.Add(this.comboBox2);
            this.Controls.Add(this.cbx_PNum);
            this.Controls.Add(this.label4);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.cbx_FocusAddr);
            this.Controls.Add(this.cbx_PAddr);
            this.Controls.Add(this.label2);
            this.Controls.Add(this.label1);
            this.Controls.Add(this.tbx_Data);
            this.Controls.Add(this.tbx_Show);
            this.Controls.Add(this.tbxPort);
            this.Controls.Add(this.IPAdd);
            this.Controls.Add(this.label225);
            this.Controls.Add(this.label226);
            this.Controls.Add(this.DisConnect);
            this.Controls.Add(this.Connect);
            this.Name = "CNET_L1";
            this.Text = "CNET--L1";
            this.ResumeLayout(false);
            this.PerformLayout();

        }

        #endregion

        private System.Windows.Forms.TextBox tbxPort;
        private System.Windows.Forms.TextBox IPAdd;
        private System.Windows.Forms.Label label225;
        private System.Windows.Forms.Label label226;
        private System.Windows.Forms.Button DisConnect;
        private System.Windows.Forms.Button Connect;
        private System.Windows.Forms.TextBox tbx_Show;
        private System.Windows.Forms.TextBox tbx_Data;
        private System.Windows.Forms.Label label1;
        private System.Windows.Forms.Label label2;
        private System.Windows.Forms.ComboBox cbx_PAddr;
        private System.Windows.Forms.ComboBox cbx_FocusAddr;
        private System.Windows.Forms.Label label3;
        private System.Windows.Forms.Label label4;
        private System.Windows.Forms.ComboBox cbx_PNum;
        private System.Windows.Forms.ComboBox comboBox2;
    }
}
 

 其他的类文件:

 Pack。cs


using System;
 

using System.Collections.Generic;
using System.Text;
using System.Collections;
using System.Windows.Forms;

namespace TCPPhoto
{
    public class Pack
    {
        /// <summary>
        /// /// 打包
        /// </summary>
        /// <param name="message">图片信息</param>
        /// <param name="cbx">照相机地址</param>
        /// <param name="count">照片总包数</param>
        /// <param name="i">当前数据包序号</param>
        /// <param name="datalength">当前数据包长度</param>
        /// <returns></returns>
        public byte[] PhotoDataPacks(byte[] message,ComboBox cbx,int count,int i,int datalength,int order)
        {
            List<byte> data = new List<byte>();
            data.Add(0xf0);
            data.AddRange(new byte[]{0xAA,0xAA,0xAA,0xAA,0xAA,0xAA});//010000000000//集中器的地址
            data.Add(0xf1);//起始标识
            data.AddRange(new byte[] { 0x00, 0x00 });//帧长度【后面再修改为正确的长度】
            data.AddRange(new byte[] { 0x4E,0x00});//控制字
            //byte[] serial = BitConverter.GetBytes(message.Serial);
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(order.ToString().Replace(" ", ""), 2)));//帧序号
            //读取整张照片数据
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StrConvertToBytes(cbx.Text.ToString())));//照相机地址
            data.AddRange(new byte[]{0x0B,0x00});//照片序号

            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(count.ToString(),2)));//照片总包数
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(i.ToString(), 2)));//当前数据包序号
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(datalength.ToString(), 2)));//当前数据包长度
            data.AddRange(message);
            byte[] length = BitConverter.GetBytes(data.Count - 10 + 3);//长度【从控制字到结束标志】
            data[8] = length[0];
            data[9] = length[1];

            byte[] temp = new byte[data.Count];
            data.CopyTo(temp);//将整个 List <T > 复制到兼容的一维数组中,从目标数组的开头开始放置。
            byte[] crc = Common.CRCVerify(temp, 0, temp.Length);
            data.AddRange(crc);//CRC校验【从0xF0到数据位】
            data.Add(0xFE);

            byte[] result = new byte[data.Count];
            data.CopyTo(result);

            return result;
        }


        /// <summary>
        /// 应答集中器信息
        /// </summary>
        /// <param name="count">照相机个数</param>
        /// <param name="str">集中器地址</param>
        /// <param name="datetime">集中器时间</param>
        /// <returns></returns>
        public byte[] ReponseFocusPacks(int count,string str,DateTime datetime,int order)
        {
            List<byte> data = new List<byte>();
            data.Add(0xf0);
            data.AddRange(new byte[] { 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA });//010000000000//集中器的地址
            data.Add(0xf1);//起始标识
            data.AddRange(new byte[] { 0x00, 0x00 });//帧长度【后面再修改为正确的长度】
            data.AddRange(new byte[] { 0x43, 0x00 });//控制字
            //byte[] serial = BitConverter.GetBytes(message.Serial);
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(order.ToString().Replace(" ", ""), 2)));//帧序号
            //读取集中器信息
            data.AddRange(new byte[] {0x00});//集中器信息

            data.AddRange(StrToBytes.StrAddToBytes(str));//本机地址
            data.AddRange(new byte[] { 0x01,0x00 });//集中器状态
            data.AddRange(new byte[] { 0x00 });//频道
            data.AddRange(DateTimeStrBytes.DateStrBytes(datetime));//集中器日期
            data.AddRange(new byte[] { 0x19 });//集中器温度
            data.AddRange(new byte[] { 0x01 });//管辖照相机总数
            data.AddRange(new byte[] { 0x01 });//在网照相机总数
            data.AddRange(new byte[] { 0x00,0x00 });//管辖电子价签总数
            data.AddRange(new byte[] { 0x00,0x00 });//在网电子价签总数
            byte[] length = BitConverter.GetBytes(data.Count - 10 + 3);//长度【从控制字到结束标志】
            data[8] = length[0];
            data[9] = length[1];
            byte[] temp = new byte[data.Count];
            data.CopyTo(temp);//将整个 List <T > 复制到兼容的一维数组中,从目标数组的开头开始放置。
            byte[] crc = Common.CRCVerify(temp, 0, temp.Length);
            data.AddRange(crc);//CRC校验【从0xF0到数据位】
            data.Add(0xFE);

            byte[] result = new byte[data.Count];
            data.CopyTo(result);

            return result;
        }
        /// <summary>
        /// 应答照相机信息
        /// </summary>
        /// <param name="count">照相机个数</param>
        /// <param name="str">照相机地址</param>
        /// <param name="datetime">帧序号+1操作</param>
        /// <returns></returns>
        public byte[] ReponsePhotoPacks(int count,ComboBox cbx,int order)
        {
            //F0 AAAAAAAAAAAA F1 1100 4300 0200 01 01 0B0000000000 03 19 5E6A FE
            List<byte> data = new List<byte>();
            data.Add(0xf0);
            data.AddRange(new byte[] { 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA });//010000000000//集中器的地址
            data.Add(0xf1);//起始标识
            data.AddRange(new byte[] { 0x00, 0x00 });//帧长度【后面再修改为正确的长度】
            data.AddRange(new byte[] { 0x43, 0x00 });//控制字
            //byte[] serial = BitConverter.GetBytes(message.Serial);
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(order.ToString().Replace(" ", ""), 2)));//帧序号
            //读取照相机信息
            data.AddRange(new byte[] { 0x01 });//信息类型

            data.AddRange(StrToBytes.StringToBytes(count.ToString().Replace(" ", ""), 1));//照相机总个数
            for (int i = 0; i < count-1; i++)
            {
                data.AddRange(BytesConvert.bytesConvert(StrToBytes.StrConvertToBytes(cbx.Items[i].ToString())));//照相机地址
                data.AddRange(new byte[] { 0x03 });//照相机状态二进制11
                data.AddRange(new byte[] { 0x96 });//照相机电池电压
            }
            byte[] length = BitConverter.GetBytes(data.Count - 10 + 3);//长度【从控制字到结束标志】
            data[8] = length[0];
            data[9] = length[1];
            byte[] temp = new byte[data.Count];
            data.CopyTo(temp);//将整个 List <T > 复制到兼容的一维数组中,从目标数组的开头开始放置。
            //byte[] crc = Common.CRCVerify(temp, 0, temp.Length);
            //data.AddRange(crc);//CRC校验【从0xF0到数据位】
            data.AddRange(new byte[] { 0x00,0x00 });
            data.Add(0xFE);

            byte[] result = new byte[data.Count];
            data.CopyTo(result);

            return result;
        }

        /// <summary>
        /// 应答新图片信息
        /// </summary>
        /// <param name="cbx">照相机地址</param>
        /// <param name="count">照片数量</param>
        /// <param name="orders">序号</param>
        /// <param name="datetime">时间</param>
        /// <param name="datasize">数据量大小</param>
        /// <returns></returns>
        public byte[] ReponseNewPhotoPacks(ComboBox cbx, int count, int orders, DateTime datetime, long datasize, int order)
        {
            List<byte> data = new List<byte>();
            data.Add(0xf0);
            data.AddRange(new byte[] { 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA });//010000000000//集中器的地址
            data.Add(0xf1);//起始标识
            data.AddRange(new byte[] { 0x00, 0x00 });//帧长度【后面再修改为正确的长度】
            data.AddRange(new byte[] { 0x49, 0x00 });//控制字
            //byte[] serial = BitConverter.GetBytes(message.Serial);
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(order.ToString().Replace(" ", ""), 2)));//帧序号
            //读取整张照片信息
            data.AddRange(BytesConvert.bytesConvert(StrToBytes.StrConvertToBytes(cbx.Text.ToString())));//照相机地址
            data.AddRange(StrToBytes.StringToBytes(count.ToString().Replace(" ", ""), 1));//照片数量
            if (count == 1)
            {
                data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(orders.ToString().Replace(" ", ""), 2)));//照片序号
                byte[] date = DateTimeStrBytes.DateStrBytes(datetime);
                data.AddRange(date);
                data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(datasize.ToString().Replace(" ", ""), 4)));//照片数据量大小
            }
            else
            {
                data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(orders.ToString().Replace(" ", ""), 2)));//照片序号
                byte[] date = DateTimeStrBytes.DateStrBytes(datetime);
                data.AddRange(date);//日期
                data.AddRange(BytesConvert.bytesConvert(StrToBytes.StringToBytes(datasize.ToString().Replace(" ", ""), 4)));//照片数据量大小
            }
            byte[] length = BitConverter.GetBytes(data.Count - 10 + 3);//长度【从控制字到结束标志】
            data[8] = length[0];
            data[9] = length[1];

            byte[] temp = new byte[data.Count];
            data.CopyTo(temp);//将整个 List <T > 复制到兼容的一维数组中,从目标数组的开头开始放置。
            byte[] crc = Common.CRCVerify(temp, 0, temp.Length);
            data.AddRange(crc);//CRC校验【从0xF0到数据位】
            data.Add(0xFE);

            byte[] result = new byte[data.Count];
            data.CopyTo(result);

            return result;
        }


        /// <summary>
        /// 控制字+是否应答+上下行
        /// </summary>
        /// <param name="isAnswer"></param>
        /// <param name="isUp"></param>
        /// <param name="command"></param>
        /// <returns></returns>
        static byte GetCommand(bool isAnswer, bool isUp, EnumCommand command)
        {
            byte result;

            BitArray bitCommand = new BitArray(new byte[] { (byte)command });
            bitCommand[7] = isAnswer;
            bitCommand[6] = isUp;
            byte[] arrResult = new byte[1];
            bitCommand.CopyTo(arrResult, 0);
            result = arrResult[0];

            return result;
        }
    }
}

 SplitPack.cs分包


using System;
 

using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Windows.Forms;

namespace TCPPhoto
{
    //public delegate void MessageDelegate(TextBox txtbox, string Messages);//委托文本框
    class SplitPack
    {
         // public event MessageDelegate messageDelegate;
        Pack IsPack = new Pack();
        //private void Messages(TextBox txtbox, string message)
        //{
        //    if (txtbox.InvokeRequired)//示调用方在对控件进行方法调用时是否必须调用 Invoke 方法,因为调用方位于创建控件所在的线程以外的线程中。
        //    {
        //        MessageDelegate showMessageDelegate = Messages;
        //        txtbox.Invoke(showMessageDelegate, new object[] { txtbox, message });
        //    }
        //    else
        //    {
        //        txtbox.Text += message + "\r\n";
        //    }
        //}
        /// <summary>
        /// 切割发包
        /// </summary>
        /// <param name="svr">Socket</param>
        /// <param name="a">照相机地址</param>
        /// <param name="size">按1024切割</param>
        /// <param name="bytes">传入的照片数据byte</param>
        public void Sends(Socket svr, ComboBox cbx_Paddr,TextBox tbx_Data,int size, byte[] bytes,int order)
        {
            int len = bytes.Length;//779433
            int count = len / size;//761
            if (count < 490)
            {
                byte[] newByte = new byte[size];
                int j = 0;
                if (count > 0)
                {
                    if (len % size != 0)//169
                    {
                        j++;
                    }
                    count = count + j;
                    int endsize = 0;//最后一个包 不一定是完整的1024 需要判断是否是最后一个包。
                    for (int i = 0; i < count; i++)
                    {
                        if ((count - 1) == i)
                        {
                            endsize = len - (i * size);
                            newByte = new byte[endsize];
                        }
                        Array.Copy(bytes, i * size, newByte, 0, (count - 1) == i ? endsize : size);
                        byte[] DataBytes = IsPack.PhotoDataPacks(newByte, cbx_Paddr, count - j, i, newByte.Length, order);
                        svr.Send(DataBytes);
                        string str= BitConverter.ToString(DataBytes).Replace("-", "");
                        int a=str.Length;
                        //Messages(tbx_Data, DateTime.Now + "服务端读取整张照片数据:" + " " + BitConverter.ToString(DataBytes).Replace("-", "") + "\r\n");
                    }
                }
                else
                {
                    svr.Send(bytes);
                }
            }
        }
    }
}

 fileJpeg。cs 文件转换


using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Drawing;

namespace TCPPhoto
{
    public class FileJPEG
    {
        public byte[] Read(string sourcePath)
        {
            FileInfo fi = new FileInfo(sourcePath);
            int fileLength = Convert.ToInt32(fi.Length);
            FileStream fs = new FileStream(sourcePath, FileMode.Open);
            BinaryReader br = new BinaryReader(fs, System.Text.Encoding.ASCII);
            byte[] btReads = br.ReadBytes(fileLength);
            br.Close();
            fs.Close();

            return btReads;
        }
        /// <summary>
        /// Convert Byte[] to Image
        /// </summary>
        /// <param name="buffer"></param>
        /// <returns></returns>
        public Image BytesToImage(byte[] buffer)
        {

            MemoryStream ms = new MemoryStream(buffer);
            Image image = System.Drawing.Image.FromStream(ms);

            return image;
        }
    }
}

using System;
using System.Collections.Generic;
using System.Text;

namespace TCPPhoto
{
    public class BytesConvert
    {
        /// <summary>
        /// 字节数组逆转
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static byte[] bytesConvert(byte[] s)
        {
            byte[] byteNew = new byte[s.Length];
            for (int i = s.Length - 1; i >= 0; i--)
            {
                byteNew[s.Length - i - 1] = s[i];
            }
            //byte[] temp = new byte[2];
            //temp[0] = s[1];
            //temp[1] = s[0];
            return byteNew;
        }
    }
}

 


using System;
 

using System.Collections.Generic;
using System.Text;

namespace TCPPhoto
{
    public class Common
    {
        #region"CRC校验"

        /// <summary>
        /// CRC校验
        /// </summary>
        /// <param name="ptr">校验的BYTE数组</param>
        /// <param name="beginIndex">校验的起始下标</param>
        /// <param name="lenth">校验的长度</param>
        /// <returns></returns>
        public static byte[] CRCVerify(byte[] ptr, int beginIndex, int lenth)
        {
            UInt16 crc;
            byte da;
            int endIndex = beginIndex + lenth;
            // int i = 0; 
            // len = ptr.Length;

            #region"CRC余式表"
            UInt16[] crc_ta =
                {
                0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7,
   0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef,
   0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6,
   0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de,
   0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485,
   0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d,
   0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4,
   0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc,
   0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823,
   0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b,
   0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12,
   0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a,
   0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41,
   0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49,
   0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70,
   0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78,
   0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f,
   0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067,
   0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e,
   0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256,
   0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d,
   0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
   0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c,
   0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634,
   0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab,
   0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3,
   0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a,
   0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92,
   0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9,
   0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1,
   0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8,
   0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0
                };
            #endregion;

            crc = 0;//初始化CRC的值

            for (int i = beginIndex; i < endIndex; i++)
            {
                da = Convert.ToByte(crc / 256);//获取底8位
                crc <<= 8;//获取高8位
                crc ^= crc_ta[da ^ ptr[i]];//查询CRC样式表进行异或操作

            }

            byte[] CRC;
            CRC = BitConverter.GetBytes(crc);//获取所需要的byte数组,使得一个16位的字符变成两个8位的byte数组,高字节在前、低字节在后
            return (CRC);
        }

        #endregion

        /// <summary>
        /// BCD码【字符串->字节】
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static byte[] getByteID(string id)
        {
            byte[] data = new byte[6];
            string substr = "";
            for (int i = 0; i < id.Length / 2; i++)
            {
                substr = id.Substring(i * 2, 2);
                data[5 - i] = Convert.ToByte(substr, 16);
            }

            return data;
        }

        /// <summary>
        /// BCD码【字节->字符串】
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        public static string getStrID(byte[] id)
        {
            string result = "";
            for (int i = 0; i < id.Length; i++)
            {
                result = result + Convert.ToString(id[5 - i], 16).PadLeft(2, '0');
            }

            return result;
        }

        /// <summary>
        /// 时间【0x17 0x10 0x21 0x05 0x06 0x15】
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static byte[] getByteDateTime(string time)
        {
            string[] temp = time.Substring(2).Split(new char[] { '/', ' ', ':' });

            byte[] data = new byte[temp.Length];
            for (int i = 0; i < temp.Length; i++)
            {
                data[i] = Convert.ToByte(temp[i]);
            }

            return data;
        }

        /// <summary>
        /// 时间【2017/10/21 5:06:15】
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static string getStrDateTime(byte[] time)
        {
            string result = "";

            string[] temp = new string[time.Length];
            for (int i = 0; i < time.Length; i++)
            {
                temp[i] = Convert.ToString(time[i]).PadLeft(2, '0');
            }

            result = "20" + temp[0] + "/" + temp[1] + "/" + temp[2] + " " + temp[3] + ":" + temp[4] + ":" + temp[5];

            return result;
        }

        /// <summary>
        /// 时间【20:01:02】
        /// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static byte[] getByteTime(string time)
        {
            string[] temp = time.Split(new char[] { ':' });

            byte[] data = new byte[temp.Length];
            for (int i = 0; i < temp.Length; i++)
            {
                data[i] = Convert.ToByte(temp[i]);
            }

            return data;
        }

        /// <summary>
        /// 作为文件名称的时间【文件名不能包含字符 \/:*?"<>/// </summary>
        /// <param name="time"></param>
        /// <returns></returns>
        public static string getPhotoNameTime(string time)
        {
            string result = "";

            string[] temp = time.Split('/', ':', ' ');
            result = temp[0] + temp[1].PadLeft(2, '0') + temp[2].PadLeft(2, '0') + " "
                + temp[3].PadLeft(2, '0') + temp[4].PadLeft(2, '0') + temp[5].PadLeft(2, '0');

            return result;
        }
    }
}

 

 


using System;
 

using System.Collections.Generic;
using System.Text;

namespace TCPPhoto
{
    public class DateTimeStrBytes
    {
        /// <summary>
        /// 日期转换为6字节的字节数组
        /// </summary>
        /// <param name="dt"></param>
        /// <returns></returns>
        public static byte[] DateStrBytes(DateTime dt)
        {
            byte[] bytes = new byte[6];
            if (dt != null)
            {
                bytes[0] = Convert.ToByte(dt.Year.ToString().Substring(2, 2), 16);
                bytes[1] = Convert.ToByte(dt.Month.ToString(), 16);
                bytes[2] = Convert.ToByte(dt.Day.ToString(), 16);
                bytes[3] = Convert.ToByte(dt.Hour.ToString(), 16);
                bytes[4] = Convert.ToByte(dt.Minute.ToString(), 16);
                bytes[5] = Convert.ToByte(((int)dt.DayOfWeek).ToString(), 16);
            }
            return BytesConvert.bytesConvert(bytes); ;
        }
    }
}

 

using System;
using System.Collections.Generic;
using System.Text;

namespace TCPPhoto
{
    public class OrderControl
    {
        /// <summary>
        /// 帧序号+1
        /// </summary>
        /// <param name="CompareByte">返回的帧号</param>
        /// <returns></returns>
        public static int OrderAddOne(byte[] CompareByte)
        {
            byte[] data = new byte[] { CompareByte[12], CompareByte[13] };//帧序号
            byte[] ConvertOrder = BytesConvert.bytesConvert(data);//
            string cstr = BitConverter.ToString(ConvertOrder).Replace("-", "");
            int Order = Convert.ToInt32(cstr, 16) + 1;
            return Order;
        }
    }
}

 


using System;
 

using System.Collections.Generic;
using System.Text;

namespace TCPPhoto
{
    public class StrToBytes
    {
        /// <summary>
        /// 
        /// </summary>
        /// <param name="s"></param>
        /// <param name="pararm">要转换的长度</param>
        /// <returns></returns>
        public static byte[] StringToBytes(string s, int pararm)
        {
            string str = s;
            int Data = int.Parse(str);
            string data = string.Empty;
            if (pararm == 1)
            {
                string len = "1";
                data = Data.ToString("X" + len);
                //byte[] bytes = strToToHexByte(str);
                while (data.Length < 2)
                {
                    data = "0" + data;
                }
                if (data.Length > 4)
                {
                    data = data.Substring(data.Length - 2, 2);
                }
                string[] str1 = new string[data.Length / 2];
                byte[] bytes = new byte[data.Length / 2];
                for (int i = 0; i < data.Length / 2; i++)
                {
                    str1[i] = data.Substring(i * 2, 2);
                    bytes[i] = Convert.ToByte(str1[i], 16);
                    //string str2 = ("0x" + str1[i]);
                }
                return bytes;
            }
            else
            {
                string len = "4";
                data = Data.ToString("X" + len);
                //byte[] bytes = strToToHexByte(str);
                if (data.Length == 5)
                {
                    while (data.Length < 8)
                    {
                        data = "0" + data;
                    }
                }
                else
                {
                    while (data.Length < pararm * 2 - 1)
                    {
                        data = "00" + data;
                    }
                }
                string[] str1 = new string[data.Length / 2];
                byte[] bytes = new byte[data.Length / 2];
                for (int i = 0; i < data.Length / 2; i++)
                {
                    str1[i] = data.Substring(i * 2, 2);
                    bytes[i] = Convert.ToByte(str1[i], 16);
                    //string str2 = ("0x" + str1[i]);
                }
                return bytes;
            }
        }
        /// <summary>
        /// 的集中器地址转换为6字节bytes
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static byte[] StrAddToBytes(string s)
        {
            byte[] data=new byte[s.Length/2];
            for (int i = 0; i < s.Length/2; i = i + 2)
            {
                data[i] = Convert.ToByte(s.Substring(i * 2, 2), 16);
            }

            return BytesConvert.bytesConvert(data);
 
        }

        /// <summary>
        /// 摄像头转换为6字节bytes
        /// </summary>
        /// <param name="s"></param>
        /// <returns></returns>
        public static byte[] StrConvertToBytes(string s)
        {
            byte[] data = new byte[s.Length / 2];
            for (int i = 0; i < s.Length / 2; i = i + 2)
            {
                data[i] = Convert.ToByte(s.Substring(i * 2, 2), 16);
            }

            return data;

        }
    }
}

 

 

posted @ 2018-01-18 23:04  (时光)光阴飞逝  阅读(220)  评论(0)    收藏  举报