/// <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()); } }
private void dgv_file_CellClick(object sender, DataGridViewCellEventArgs e) { intParamDele dele = new intParamDele(delNRfile); Invoke(dele, e.RowIndex); }
private void dgv_transfer_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e) { intParamDele dele = new intParamDele(delNRTrans); Invoke(dele, e.RowIndex); }
//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()); } }