コード例 #1
0
ファイル: frm_Main.cs プロジェクト: highdna808/MultiChat
        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);
            }
        }
コード例 #2
0
ファイル: frm_Main.cs プロジェクト: highdna808/MultiChat
        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);
                        }
                    }
                }
            }));
        }