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; } } }
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 { } } } }