private void btn_FileTransfer_Click(object sender, EventArgs e) { // 접속 되어 있지 않을 경우 취소 if (listBox1.Items.Count == 0) { MessageBox.Show("서버와 연결되어 있지 않습니다."); return; } // 수신자가 선택되어 있지 않음 if (listBox1.SelectedIndex < 0) { MessageBox.Show("파일을 전송할 유저를 선택해 주세요."); return; } string sIP = listBox1.SelectedItem.ToString().Substring(0, listBox1.SelectedItem.ToString().IndexOf(':')).Trim(); string sPort = listBox1.SelectedItem.ToString().Substring(listBox1.SelectedItem.ToString().IndexOf(':') + 1).Trim(); // 받는 사람이 호스트일 경우 if (sPort.Contains(' ')) { sPort = sPort.Substring(0, sPort.IndexOf(' ')); } if (myIP.Equals(sIP + ":" + sPort)) { MessageBox.Show("본인이 선택되었습니다."); return; } // 파일 전송 정보 clsMSG.sHeader = SocketMSG.MESSAGE_TYPE.DATA; clsMSG.sReceiver = listBox1.SelectedItem.ToString(); clsMSG.sReceiver = sIP + ":" + sPort; // 보낼 파일 SockFileTransfer sockFileTransfer = new SockFileTransfer(); var o_Packet = sockFileTransfer.FileSelect(); // 선택된 파일이 없음 if (o_Packet == null) { return; } // 파일 전송 if (isServer) { // 서버 clsServer.FileSend(clsMSG, o_Packet); } else { // 클라이언트 MultiSockets_FileTransfer.FileSocketClient fileSocketClient = new MultiSockets_FileTransfer.FileSocketClient(); clsClient.OnSendData(clsMSG, o_Packet); System.Threading.Thread.Sleep(50); fileSocketClient.ClientFileSend(clsMSG, o_Packet, txt_IPaddr.Text); } }
private void Received_DATA(string sender, string[] msg) { Invoke(new ReceivedData(delegate { if (msg[0] == "DATA") { var fileInfo = msg[3].Split('/'); ReceivedFile._sender = msg[1]; ReceivedFile._Receiver = msg[2]; ReceivedFile._FileName = fileInfo[0]; ReceivedFile._Size = int.Parse(fileInfo[1]); ReceivedFile._PacketCnt = int.Parse(fileInfo[2]); ReceivedFile._Data = new byte[ReceivedFile._Size]; ReceivedFile._RemainPacket = int.Parse(fileInfo[3]); // 서버 관리용 파일 관리 정보 StoredPackage SPakage = new StoredPackage(ReceivedFile._sender, ReceivedFile._Receiver, ReceivedFile._FileName, ReceivedFile._Size); if (isServer) { if (ReceivedFile._Receiver == myIP) { // 서버가 수신인 frm_Alarm frmAlarm = new frm_Alarm(ReceivedFile._sender, ReceivedFile._FileName); frmAlarm.Show(); } else { // 클라이언트 -> 서버 -> 수신인 clsMSG.sSender = ReceivedFile._sender; clsMSG.sReceiver = ReceivedFile._Receiver; clsMSG.sHeader = SocketMSG.MESSAGE_TYPE.DATA; FileStream fileStr = new FileStream(ReceivedFile._FileName, FileMode.Create, FileAccess.Write); BinaryWriter writer = new BinaryWriter(fileStr); writer.Write(ReceivedFile._Data, 0, ReceivedFile._Size); fileStr.Close(); // 보낼 파일 SockFileTransfer sockFileTransfer = new SockFileTransfer(); var o_Packet = sockFileTransfer.FileSelect(ReceivedFile._FileName); clsServer.FileSend(clsMSG, o_Packet); } } } })); }