Example #1
0
        private void btnTestMN_Click(object sender, EventArgs e)
        {
            byte[] frame = FileTransferProtocol.GetFrameMNVersionLimited(255, "1234", -1);

            TcpClient tcpclient = new TcpClient(cmbIP.Text, int.Parse(txtPort.Text));

            Stream s = tcpclient.GetStream();

            s.Write(frame, 0, frame.Length);
        }
Example #2
0
 private void btnUpdate_Click(object sender, EventArgs e)
 {
     try
     {
         byte[] data = FileTransferProtocol.GetFrameMNVersionLimited(int.Parse(txtSend.Text), txtMN.Text, -1);
         serialPort1.Write(data, 0, data.Length);
     }
     catch (Exception er)
     {
     }
 }
Example #3
0
        //FileStream fStream = null;
        private void SetupFrameHandler()
        {
            serialPortFrameMgr = new FrameManager((ushort)(serialPort1.ReadBufferSize * 2), serialPort1);

            serialPortFrameMgr.OnReceiveFrame += new FrameManager.OnReceiveFrameHandler(
                delegate(FileTransferProtocol.CommandType frameType, int parameter, byte[] commandData)
            {
                switch (frameType)
                {
                case FileTransferProtocol.CommandType.FileName:
                    string fileName = System.Text.Encoding.Default.GetString(commandData);

                    if (fileName != null)
                    {
                        string CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName);
                        string startDir    = CurrentPath + @"update\";
                        if (File.Exists(fileName))
                        {
                            File.Delete(fileName);
                        }
                        fStream = File.Open(fileName, FileMode.CreateNew);

                        SetText(DateTime.Now.ToString() + " 准备接收文件:" + fileName + " 文件总长度:" + parameter);
                    }
                    break;

                case FileTransferProtocol.CommandType.FileData:
                    if (fStream != null && commandData != null && commandData.Length > 0)
                    {
                        fStream.Write(commandData, 0, commandData.Length);
                        //SetText("收到文件数据长度" + commandData.Length);
                    }
                    break;

                case FileTransferProtocol.CommandType.FileSendFinish:

                    if (fStream != null)
                    {
                        fStream.Close();
                        fStream = null;
                        SetText(DateTime.Now.ToString() + " 收到文件结束信号");
                    }
                    break;

                case FileTransferProtocol.CommandType.WhatIsYourMNandVersion:
                    byte[] frame = FileTransferProtocol.GetFrameMNVersionLimited(1, "123", serialPort1.BaudRate);
                    serialPort1.Write(frame, 0, frame.Length);
                    break;

                case FileTransferProtocol.CommandType.Message:
                    string message = System.Text.Encoding.Default.GetString(commandData);
                    this.Invoke(new EventHandler(delegate(object s, EventArgs ar)
                    {
                        this.txtData.Text += message + "\r\n";
                    }));
                    break;
                }

                return(true);
            });
        }
Example #4
0
        private void ConnectOrDisconnect()
        {
            var ip   = cmbIP.Text;
            var port = int.Parse(txtPort.Text);

            if (mThreadConnectToServer == null || mThreadConnectToServer.ThreadState == System.Threading.ThreadState.Stopped)
            {
                mThreadConnectToServer = new Thread(new ThreadStart(delegate()
                {
                    try
                    {
                        if (stream != null)
                        {
                            stream.Close();
                        }

                        tcpclient = new TcpClient(ip, port);
                        //SetButtonState(btnConnect, "断开(&S)");
                        tcpclient.ReceiveBufferSize = 0xFFFF + 1;
                        tcpclient.SendBufferSize    = 0xFFFF + 1;
                        stream = tcpclient.GetStream();
                        int revFilePartCount = 0;

                        try
                        {
                            stream.Write(System.Text.Encoding.Default.GetBytes("OK"), 0, 2);
                            SetButtonState(btnConnect, "断开(&S)");
                        }
                        catch (Exception ex)
                        {
                            if (stream != null)
                            {
                                stream.Close();
                            }
                            if (tcpclient != null)
                            {
                                tcpclient.Close();
                            }
                            mThreadConnectToServer.Abort();
                            return;
                        }

                        //创建帧分析对象
                        fFrameMgr = new FrameManager((ushort)(serialPort1.ReadBufferSize * 3), stream);
                        //实现帧处理函数
                        fFrameMgr.OnReceiveFrame += new FrameManager.OnReceiveFrameHandler(
                            delegate(FileTransferProtocol.CommandType frameType, int parameter, byte[] commandData)
                        {
                            //NetworkStream nStream = (NetworkStream)_stream;

                            switch (frameType)
                            {
                            case FileTransferProtocol.CommandType.FileName:
                                string fileName = System.Text.Encoding.Default.GetString(commandData, 0, commandData.Length);

                                if (fileName != null)
                                {
                                    if (fStream != null)
                                    {
                                        fStream.Close();
                                        fStream = null;
                                    }
                                    revFilePartCount = 0;
                                    //string CurrentPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().ManifestModule.FullyQualifiedName);
                                    string CurrentPath = System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().GetName().CodeBase);
                                    string startDir    = CurrentPath + @"\update\";
                                    if (!Directory.Exists(startDir))
                                    {
                                        Directory.CreateDirectory(startDir);
                                    }

                                    var dir = Path.GetDirectoryName(startDir + fileName);
                                    Debug.WriteLine("目录:" + dir);
                                    if (!Directory.Exists(dir))
                                    {
                                        Directory.CreateDirectory(dir);
                                    }
                                    if (File.Exists(startDir + fileName))
                                    {
                                        File.Delete(startDir + fileName);
                                    }
                                    fStream = File.Open(startDir + fileName, FileMode.CreateNew);

                                    AddItemToList(listBox1, DateTime.Now.ToString() + " 准备接收文件:" + fileName + " 文件总长度:" + parameter);
                                }
                                break;

                            case FileTransferProtocol.CommandType.FileData:
                                if (fStream != null && commandData != null && commandData.Length > 0)
                                {
                                    revFilePartCount++;
                                    fStream.Write(commandData, 0, commandData.Length);
                                    AddItemToList(listBox1, string.Format("收到 第{0}块 数据长度:{1} 服务器端分块号:{2} ", revFilePartCount, commandData.Length, parameter));
                                }
                                break;

                            case FileTransferProtocol.CommandType.FileSendFinish:

                                if (fStream != null)
                                {
                                    fStream.Close();
                                    fStream = null;
                                    AddItemToList(listBox1, DateTime.Now.ToString() + " 收到文件结束信号");
                                }
                                break;

                            case FileTransferProtocol.CommandType.WhatIsYourMNandVersion:
                                byte[] frame = FileTransferProtocol.GetFrameMNVersionLimited(1, "123", -1);
                                stream.Write(frame, 0, frame.Length);
                                break;

                            case FileTransferProtocol.CommandType.Message:
                                string message = System.Text.Encoding.Default.GetString(commandData, 0, commandData.Length);

                                AddItemToList(listBox1, message);

                                break;
                            }

                            return(true);
                        });


                        //------------------------------------------------------------------------------------
                        //方式0数采仪被动更新(只有在更新服务器询问[指定列表的]数采仪时,则数据采仪才更新)
                        //------------------------------------------------------------------------------------
                        ////把 网络 或 串口 的 数据 传给 帧分析对象的Handler函数做分析
                        if (receiveThread == null || receiveThread.ThreadState == System.Threading.ThreadState.Stopped)
                        {
                            receiveThread = new Thread(new ThreadStart(delegate()
                            {
                                int MaxLength = FileTransferProtocol.MaxFrameLength - FileTransferProtocol.FrameStructLength;//64*1024;0xFFFF+1;64K;
                                Byte[] data   = new Byte[MaxLength];
                                try
                                {
                                    bool running = true;
                                    while (running)
                                    {
                                        Debug.WriteLine(string.Format("{0}", Thread.CurrentThread.Name));


                                        Int32 bytes = 0;
                                        try
                                        {
                                            bytes = stream.Read(data, 0, data.Length);
                                        }
                                        catch (System.IO.IOException er)
                                        {
                                            DisConnect();
                                        }
                                        if (bytes > 0)
                                        {
                                            //这是处理收到帧
                                            running = fFrameMgr.Handler(bytes, data);
                                        }
                                        else
                                        {
                                            //远端客户主动断开socket
                                            running = false;
                                        }
                                    }
                                }
                                catch (ThreadAbortException er)
                                {
                                    AddItemToList(listBox1, string.Format(DateTime.Now.ToString() + " 连接{0}:{1}未成功或已取消", ip, port));
                                    receiveThread = null;
                                }
                                catch (Exception err)
                                {
                                    AddItemToList(listBox1, DateTime.Now.ToString() + " " + err.Message);
                                }
                            }));
                            receiveThread.Start();
                        }
                        else
                        {
                            if (stream != null)
                            {
                                stream.Close();
                            }
                            receiveThread.Abort();
                            receiveThread = null;
                        }
                        //-----------------------------------------方式0--------------------------------------
                    }
                    catch (ThreadAbortException er)
                    {
                        AddItemToList(listBox1, string.Format(DateTime.Now.ToString() + " 连接{0}:{1}未成功或已取消", ip, port));
                        mThreadConnectToServer = null;
                    }
                    catch (SocketException er)
                    {
                        AddItemToList(listBox1, DateTime.Now.ToString() + " " + er.Message);
                        DisConnect();
                    }
                }));
                mThreadConnectToServer.Start();
            }
            else
            {
                DisConnect();
            }
        }