예제 #1
0
        /// <summary>
        /// 파일 수신
        /// </summary>
        /// <param name="pData"></param>
        private void Received_DataOnly(byte[] pData)
        {
            Invoke(new ReceivedDataOnly(delegate
            {
                // 수신받은 데이터(바이트배열) 복사 위치
                int packageLength = 0;
                if (packetCnt > 0)
                {
                    packageLength = (packetCnt * 1024);
                }

                // 마지막 패킷일 경우 마지막으로 받은 패킷 크기 지정
                if (2 > ReceivedFile._PacketCnt)
                {
                    Array.Copy(pData, 0, ReceivedFile._Data, packageLength, ReceivedFile._RemainPacket);
                }
                else
                {
                    Array.Copy(pData, 0, ReceivedFile._Data, packageLength, pData.Length);
                }

                // 받은 패킷 카운트 증가, 남은 패킷 수 계산
                packetCnt += 1;
                ReceivedFile._PacketCnt -= 1;

                // 파일 전송 완료
                if (1 > ReceivedFile._PacketCnt)
                {
                    packetCnt           = 0;
                    frm_Alarm frm_Alarm = new frm_Alarm(ReceivedFile._sender, ReceivedFile._FileName);
                    frm_Alarm.Show();
                }
            }));
        }
예제 #2
0
        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);
                        }
                    }
                }
            }));
        }