Exemple #1
0
        private void RBtn_CheckedChanged(object sender, EventArgs e)
        {
            RadioButton rbtn = sender as RadioButton;

            switch (rbtn.Name)
            {
            case "MasterRBtn":
            {
                if (Master == false)
                {
                    Master = true;
                }
                if (Slave == true)
                {
                    Slave = false;
                }

                // Master 모드일 때는 파일을 다 받은 뒤 자동으로 Dialog 띄움
                OpenFileBtn.Enabled = false;
                OpenFileBtn.Update();

                // Master 모드일 때는 Receive 버튼 활성화
                RecvSendBtn.Text    = "Receive";
                RecvSendBtn.Enabled = true;
                RecvSendBtn.Update();

                break;
            }

            case "SlaveRBtn":
            {
                FileNameTbx.Text = "파일명";
                FileLocTbx.Clear();

                if (Slave == false)
                {
                    Slave = true;
                }
                if (Master == true)
                {
                    Master = false;
                }

                // Slave 모드일 때는 Dialog를 이용해 파일을 선택하기 때문에 버튼 활성화
                OpenFileBtn.Enabled = true;
                OpenFileBtn.Update();

                // Slave 모드일 때는 Send 버튼 활성화
                RecvSendBtn.Text    = "Send";
                RecvSendBtn.Enabled = false;
                RecvSendBtn.Update();
                break;
            }

            case "EthernetRBtn":
            {
                RS232             = false;
                Ethernet          = true;
                ConfigBtn.Enabled = true;
                break;
            }

            case "RS232Rbtn":
            {
                Ethernet          = false;
                RS232             = true;
                ConfigBtn.Enabled = true;
                break;
            }
            }
        }
Exemple #2
0
        private void OpenFileBtn_Click(object sender, EventArgs e)
        {
            // 소켓통신 클라이언트
            if (Ethernet == true && Slave == true)
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    filePath         = openFileDialog1.FileName;
                    FileNameTbx.Text = filePath.Split('\\')[filePath.Split('\\').Length - 1];
                    FileLocTbx.Text  = filePath;
                }

                // file 정보가 있어야만 전송버튼이 활성화 됨
                if (FileNameTbx.Text == null || FileLocTbx.Text == null)
                {
                    RecvSendBtn.Enabled = false;
                }
                else
                {
                    RecvSendBtn.Enabled = true;
                    RecvSendBtn.Update();
                }

                // 소켓 연결 시도
                TcpSocketConnect();
            }

            // 시리얼통신 클라이언트
            if (RS232 == true)
            {
                if (Slave == true)
                {
                    try
                    {
                        if (openFileDialog1.ShowDialog() == DialogResult.OK)
                        {
                            FileInfo = new FileInfo(openFileDialog1.FileName);

                            FileNameTbx.Text = (FileInfo.ToString()).Split('\\')[FileInfo.ToString().Split('\\').Length - 1];
                            FileLocTbx.Text  = FileInfo.ToString();

                            string fileName    = FileNameTbx.Text;
                            int    fileNameLen = fileName.Length;
                            int    fileSize    = Convert.ToInt32(FileInfo.Length);

                            // byte형 변수는 1Byte, int형 변수는 4Byte를 직접 더해줌...
                            TotalSize = 1 + fileNameLen + 4 + fileSize;

                            // 파일명길이
                            byte[] byteNameSize = new byte[1];
                            byteNameSize[0] = (byte)fileNameLen;
                            // 파일명
                            byte[] byteFileName = Encoding.ASCII.GetBytes(fileName);
                            // 파일길이
                            byte[] byteFileSize = BitConverter.GetBytes(fileSize);
                            // 실제 파일 데이터
                            byte[] byteFileInfo;

                            // 패킷크기만큼 생성
                            ByteSendData = new Byte[TotalSize];

                            BinaryReader reader = new BinaryReader(File.Open(openFileDialog1.FileName, FileMode.Open));

                            byteFileInfo = reader.ReadBytes(Convert.ToInt32(fileSize));

                            // 패킷생성 : 파일명길이 + 파일명 + 파일길이 + 실제 파일 데이터


                            Array.Copy(byteNameSize, 0, ByteSendData, 0, byteNameSize.Length);
                            Array.Copy(byteFileName, 0, ByteSendData, byteNameSize.Length, byteFileName.Length);
                            Array.Copy(byteFileSize, 0, ByteSendData, (byteNameSize.Length + byteFileName.Length), byteFileSize.Length);
                            Array.Copy(byteFileInfo, 0, ByteSendData, (byteNameSize.Length + byteFileName.Length + byteFileSize.Length), byteFileInfo.Length);

                            reader.Close();
                        }

                        // file 정보가 있어야만 전송버튼이 활성화 됨
                        if (FileNameTbx.Text == null || FileLocTbx.Text == null)
                        {
                            RecvSendBtn.Enabled = false;
                        }
                        else
                        {
                            RecvSendBtn.Enabled = true;
                            RecvSendBtn.Update();
                        }

                        // 시리얼 포트 연결
                        SerialConnect();
                    }
                    catch { }
                }
            }
        }