Ejemplo n.º 1
0
        /// <summary>
        /// 파일 수신 전용 메소드
        /// </summary>
        /// <param name="obj">파일 수신에 필요한 파일 정보(파일이름, 크기, 보낸사람, 보낸사람 id</param>
        private void FileReceiver(object obj)
        {
            try
            {
                Hashtable fileinfo = (Hashtable)obj;
                string filename = null;
                int filesize = 0;
                string sendername = null;
                string senderid = null;
                string fileseq = null;
                int rowIndex = 0;
                string NRseq = null;

                foreach (DictionaryEntry de in fileinfo)
                {
                    if (de.Key.ToString().Equals("name"))
                    {
                        sendername = de.Value.ToString();
                        logWrite("File sender name : " + sendername);
                    }
                    else if (de.Key.ToString().Equals("senderid"))
                    {
                        senderid = de.Value.ToString();
                        logWrite("File sender id : " + senderid);
                    }
                    else if (de.Key.Equals("filenum"))
                    {
                        fileseq = de.Value.ToString();
                    }
                    else if (de.Key.Equals("rowindex"))
                    {
                        rowIndex = Convert.ToInt32(de.Value);
                    }
                    else if (de.Key.Equals("NRseq"))
                    {
                        NRseq = de.Value.ToString();
                    }
                    else if (de.Key.Equals("filename"))
                    {
                        filename = (string)de.Value;
                        logWrite("FileReceiver() : filename=" + filename);
                    }
                    else if (de.Key.Equals("filesize"))
                    {
                        filesize = (int)de.Value;
                        logWrite("FileReceiver() : filesize=" + filesize);
                    }
                }
                #region 파일중복체크/막음
                //FileInfo fi = new FileInfo(filename);
                //int filenum = 0;
                //int strlength = filename.Length;
                //string ext = fi.Extension;

                ////저장할 파일과 같은 이름의 파일이 존재할 경우 처리로직
                //if (fi.Exists == true)
                //{
                //    string str = filename.Substring(0, (strlength - 4));
                //    string tempname = null;
                //    do
                //    {
                //        filenum++;
                //        str += "(" + filenum.ToString() + ")"; //같은 이름의 파일이 있을 경우 "파일명(filenum).확장자" 의 형태로 저장
                //        tempname = str + ext;
                //        fi = new FileInfo(tempname);
                //    } while (fi.Exists == true);
                //    filename = tempname;
                //}
                #endregion
                logWrite("CHOI_DEBUG FileReceiver 1");//CHOI_DEBUG
                if (fileseq == null) //서버수신이 아니고 직접수신인 경우
                {
                    FILE_TCPReceive(filename);
                    logWrite("CHOI_DEBUG FileReceiver 2");//CHOI_DEBUG
                    return;
                }
                logWrite("CHOI_DEBUG FileReceiver 3");//CHOI_DEBUG
            
#region //File UDP Receive
                /*****************************************************************************************************************************
                *****************************************************************************************************************************
                ******************* File UDP Receive********************************************************************************************
                *****************************************************************************************************************************
                * 1. run Listener : file name , size, listen port
                * 2. set event listener
                * 3. progress bar setting
                *****************************************************************************************************************************
                */
                int receivefailcount = 0;
                int sendfailcount = 0;
                byte[] buffer = null;

                FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.Read, 40960); //한번에 40960 바이트씩 수신

                if (filesock == null || filesock.Client == null)
                {
                    filesender = new IPEndPoint(IPAddress.Any, filereceiveport);
                    filesock = new UdpClient(filesender);
                }

                filesock.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);

                try
                {
                    lock (filesock)
                    {
                        while (true)
                        {
                            Thread.Sleep(10);
                            //logWrite("FileReceiver() 수신대기 ");
                            try
                            {
                                buffer = filesock.Receive(ref filesender);
                                //logWrite("수신!");
                            }
                            catch (Exception se)
                            {
                                logWrite("FileReceiver()  filesock.Receive 에러 : " + se.ToString());
                                receivefailcount++;
                                if (receivefailcount == 5)
                                {
                                    logWrite("수신 실패 5회로 FileReceiver 중단!");
                                    break;
                                }
                            }
                            if (buffer != null && buffer.Length != 0)
                            {
                                //logWrite("sender IP : " + filesender.Address.ToString());
                                //logWrite("sender port : " + filesender.Port.ToString());

                                byte[] receivebyte = Encoding.UTF8.GetBytes(buffer.Length.ToString());

                                try
                                {
                                    filesock.Send(receivebyte, receivebyte.Length, filesender);  //정상적으로 메시지 수신하면 응답(udp통신의 실패방지)

                                    //logWrite(buffer.Length.ToString() + " byte 수신!");
                                }
                                catch (Exception se1)
                                {
                                    logWrite("FileReceiver() filesock.Send 에러 : " + se1.ToString());
                                    sendfailcount++;
                                    if (sendfailcount == 5)
                                    {
                                        logWrite("응답전송 실패 5회로 FileReceiver 중단!");
                                        break;
                                    }
                                }
                                if (fs.CanWrite == true)
                                {
                                    try
                                    {
                                        fs.Write(buffer, 0, buffer.Length);
                                        fs.Flush();
                                    }
                                    catch (Exception e)
                                    {
                                        logWrite("FileStream.Write() 에러 : " + e.ToString());
                                    }
                                }
                                FileInfo finfo = new FileInfo(filename);

                                int size = Convert.ToInt32(finfo.Length);

                                if (size > 0)
                                {
                                    if (NRseq == null) NRseq = "0";
                                    SendMsg("14|" + NRseq, server);
                                    intParamDele intdele = new intParamDele(refreshNRfile);
                                    Invoke(intdele, rowIndex);

                                }

                                if (size >= filesize)  //파일 데이터를 모두 수신했는지 체크
                                {
                                    if (filesender.Address.Equals(server.Address))
                                    {
                                        ChangeStat showdownloadform = new ChangeStat(ShowDownloadForm); //다운로드 상태바 표시 delegate
                                        Invoke(showdownloadform, new object[] { "서버로 부터", filename });
                                    }
                                    else
                                    {
                                        foreach (DictionaryEntry de in InList)
                                        {
                                            if (((IPEndPoint)de.Value).Address.Equals(filesender.Address))
                                            {
                                                senderid = de.Key.ToString();
                                                logWrite(senderid);
                                                sendername = GetUserName(senderid);
                                                break;
                                            }
                                        }
                                        logWrite("파일 전송 완료");

                                        ChangeStat showdownloadform = new ChangeStat(ShowDownloadForm);
                                        if (senderid.Length > 1)
                                        {
                                            Invoke(showdownloadform, new object[] { sendername + "(" + senderid + ") 님으로 부터", filename });
                                        }
                                        else
                                        {
                                            Invoke(showdownloadform, new object[] { "서버로 부터", filename });
                                        }
                                    }
                                    fs.Close();
                                    break;
                                }
                            }
                        }
                    }
                }
                catch (SocketException e)
                {
                    logWrite("FileReceive() 에러 : " + e.ToString());
                }
                logWrite("FileReceiver 가 중단되었습니다. ");
#endregion //File UDP Send

           }
            catch (Exception exception)
            {
                logWrite(exception.ToString());
            }
        }
Ejemplo n.º 2
0
 private void dgv_file_CellClick(object sender, DataGridViewCellEventArgs e)
 {
     intParamDele dele = new intParamDele(delNRfile);
     Invoke(dele, e.RowIndex);
 }
Ejemplo n.º 3
0
 private void dgv_transfer_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
 {
     intParamDele dele = new intParamDele(delNRTrans);
     Invoke(dele, e.RowIndex);
 }
Ejemplo n.º 4
0
        //private void Receive()
        //{
        //    receiverStart = true;
        //    byte[] msgbuffer = null;
        //    byte[] header = null;
        //    byte[] buffer = null;
        //    try
        //    {
        //        while (true)
        //        {
        //            if (ServerSocket != null && ServerSocket.Connected)
        //            {
        //                logWrite("�޽��� ����!");
        //                header = new byte[4];
        //                ServerSocket.Receive(header, 4, SocketFlags.Peek);
        //                if (Encoding.ASCII.GetString(header).Trim().Equals("SIZE"))
        //                {
        //                    ServerSocket.Receive(header, 4, SocketFlags.None);
        //                    header = new byte[5];
        //                    ServerSocket.Receive(header, 5, SocketFlags.None);
        //                    string size = Encoding.ASCII.GetString(header);
        //                    logWrite("SIZE : " + size);
        //                    msgbuffer = new byte[Convert.ToInt32(size.Trim())];
        //                    ServerSocket.Receive(msgbuffer, Convert.ToInt32(size.Trim()), SocketFlags.None);
        //                }
        //                if (msgbuffer != null && msgbuffer.Length != 0)
        //                {
        //                    logWrite("sender IP : " + ((IPEndPoint)ServerSocket.RemoteEndPoint).Address.ToString());
        //                    logWrite("sender port : " + ((IPEndPoint)ServerSocket.RemoteEndPoint).Port.ToString());
        //                    string msg = Encoding.UTF8.GetString(msgbuffer);
        //                    logWrite("���� �޽��� : " + msg);
        //                    ArrayList list = new ArrayList();  //MsgFilter �޼ҵ忡 ���� �Ű����� ����
        //                    Thread msgThread = new Thread(new ParameterizedThreadStart(MsgFilter)); //���ŵ� �޽����� ó���� ���� ������ ����
        //                    msgThread.Start(msg);
        //                }
        //            }
        //            else
        //            {
        //                logWrite("ServerSocket is Disconnected");
        //                break;
        //            }
        //        }
        //    }
        //    catch (ThreadAbortException e)
        //    {}
        //    catch(SocketException e)
        //    {
        //        if (connected == true)
        //            logWrite("Receive() ���� : " + e.ToString());
        //    }
        //    if (connected == true)
        //        logWrite("##���## : Receiver �� �ߴܵǾ����ϴ�. ");
        //}
        /// <summary>
        /// ���� ���� ���� �޼ҵ�
        /// </summary>
        /// <param name="obj">���� ���ſ� �ʿ��� ���� ����(�����̸�, ũ��, �������, ������� id</param>
        private void FileReceiver(object obj)
        {
            try
            {
                Hashtable fileinfo = (Hashtable)obj;
                string filename = null;
                int filesize = 0;
                string sendername = null;
                string senderid = null;
                string fileseq = null;
                int rowIndex = 0;
                string NRseq = null;

                foreach (DictionaryEntry de in fileinfo)
                {
                    if (de.Key.ToString().Equals("name"))
                    {
                        sendername = de.Value.ToString();
                        logWrite("File sender name : " + sendername);
                    }
                    else if (de.Key.ToString().Equals("senderid"))
                    {
                        senderid = de.Value.ToString();
                        logWrite("File sender id : " + senderid);
                    }
                    else if (de.Key.Equals("filenum"))
                    {
                        fileseq = de.Value.ToString();
                    }
                    else if (de.Key.Equals("rowindex"))
                    {
                        rowIndex = Convert.ToInt32(de.Value);
                    }
                    else if (de.Key.Equals("NRseq"))
                    {
                        NRseq = de.Value.ToString();
                    }
                    else
                    {
                        filename = (string)de.Key;
                        logWrite("FileReceiver() : filename=" + filename);

                        filesize = (int)de.Value;
                        logWrite("FileReceiver() : filesize=" + filesize);
                    }
                }

                byte[] buffer = null;

                FileInfo fi = new FileInfo(filename);
                int filenum = 0;
                int strlength = filename.Length;
                string ext = fi.Extension;

                //������ ���ϰ� ���� �̸��� ������ ������ ��� ó������
                if (fi.Exists == true)
                {
                    string str = filename.Substring(0, (strlength - 4));
                    string tempname = null;
                    do
                    {
                        filenum++;
                        str += "(" + filenum.ToString() + ")"; //���� �̸��� ������ ���� ��� "���ϸ�(filenum).Ȯ����" �� ���·� ����
                        tempname = str + ext;
                        fi = new FileInfo(tempname);
                    } while (fi.Exists == true);
                    filename = tempname;
                }

                int receivefailcount = 0;
                int sendfailcount = 0;
                FileStream fs = new FileStream(filename, FileMode.Append, FileAccess.Write, FileShare.Read, 40960); //�ѹ��� 40960 ����Ʈ�� ����

                if (filesock == null)
                {
                    filesender = new IPEndPoint(IPAddress.Any, filereceiveport);
                    filesock = new UdpClient(filesender);
                }

                filesock.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);

                try
                {
                    lock (filesock)
                    {
                        while (true)
                        {
                            Thread.Sleep(10);
                            //logWrite("FileReceiver() ���Ŵ�� ");
                            try
                            {
                                buffer = filesock.Receive(ref filesender);
                                //logWrite("����!");
                            }
                            catch (Exception se)
                            {
                                logWrite("FileReceiver()  filesock.Receive ���� : " + se.ToString());
                                receivefailcount++;
                                if (receivefailcount == 5)
                                {
                                    logWrite("���� ���� 5ȸ�� FileReceiver �ߴ�!");
                                    break;
                                }
                            }
                            if (buffer != null && buffer.Length != 0)
                            {
                                //logWrite("sender IP : " + filesender.Address.ToString());
                                //logWrite("sender port : " + filesender.Port.ToString());

                                byte[] receivebyte = Encoding.UTF8.GetBytes(buffer.Length.ToString());

                                try
                                {
                                    filesock.Send(receivebyte, receivebyte.Length, filesender);  //���������� �޽��� �����ϸ� ����(udp����� ���й���)

                                    //logWrite(buffer.Length.ToString() + " byte ����!");
                                }
                                catch (Exception se1)
                                {
                                    logWrite("FileReceiver() filesock.Send ���� : " + se1.ToString());
                                    sendfailcount++;
                                    if (sendfailcount == 5)
                                    {
                                        logWrite("�������� ���� 5ȸ�� FileReceiver �ߴ�!");
                                        break;
                                    }
                                }
                                if (fs.CanWrite == true)
                                {
                                    try
                                    {
                                        fs.Write(buffer, 0, buffer.Length);
                                        fs.Flush();
                                    }
                                    catch (Exception e)
                                    {
                                        logWrite("FileStream.Write() ���� : " + e.ToString());
                                    }
                                }
                                FileInfo finfo = new FileInfo(filename);

                                int size = Convert.ToInt32(finfo.Length);

                                if (size > 0)
                                {
                                    SendMsg("14|" + NRseq, server);
                                    intParamDele intdele = new intParamDele(refreshNRfile);
                                    Invoke(intdele, rowIndex);

                                }

                                if (size >= filesize)  //���� �����͸� ��� �����ߴ��� üũ
                                {
                                    if (filesender.Address.Equals(server.Address))
                                    {
                                        ChangeStat showdownloadform = new ChangeStat(ShowDownloadForm); //�ٿ�ε� ���¹� ǥ�� delegate
                                        Invoke(showdownloadform, new object[] { "������ ����", filename });
                                    }
                                    else
                                    {
                                        foreach (DictionaryEntry de in InList)
                                        {
                                            if (((IPEndPoint)de.Value).Address.Equals(filesender.Address))
                                            {
                                                senderid = de.Key.ToString();
                                                logWrite(senderid);
                                                sendername = getName(senderid);
                                                break;
                                            }
                                        }
                                        logWrite("���� ���� �Ϸ�");

                                        ChangeStat showdownloadform = new ChangeStat(ShowDownloadForm);
                                        if (senderid.Length > 1)
                                        {
                                            Invoke(showdownloadform, new object[] { sendername + "(" + senderid + ") ������ ����", filename });
                                        }
                                        else
                                        {
                                            Invoke(showdownloadform, new object[] { "������ ����", filename });
                                        }
                                    }
                                    fs.Close();
                                    break;
                                }
                            }
                        }
                    }
                }
                catch (SocketException e)
                {
                    logWrite("FileReceive() ���� : " + e.ToString());
                }
                logWrite("FileReceiver �� �ߴܵǾ����ϴ�. ");
            }
            catch (Exception exception)
            {
                logWrite(exception.ToString());
            }
        }