Example #1
0
        public List <File_info> GetFilesList(string dir)
        {
            List <File_info> res = new List <File_info>();

            FtpWebResponse response = this.TryGetResponse(WebRequestMethods.Ftp.ListDirectoryDetails, null);

            if (response == null)
            {
                return(res);
            }
            StreamReader reader = new StreamReader(response.GetResponseStream());

            string s = null;

            while ((s = reader.ReadLine()) != null)
            {
                /*temp*/
                Console.WriteLine(s);
                string[] arr = s.Split(" ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
                //res.Add(arr[arr.Length - 1]);
                File_info fi = new File_info(arr[arr.Length - 1]);
                res.Add(fi);
            }

            response.Close();
            return(res);
        }
Example #2
0
        public void Run()
        {
            File_info fi = null;

            while (true)
            {
                if (fi == null)
                {
                    string cmd = this.ReceiveCmd();
                    if (cmd == null)
                    {
                        break;
                    }

                    this.parentForm.AddInfo_to_UI("Received: " + cmd);

                    if (!cmd.StartsWith("Bye", StringComparison.OrdinalIgnoreCase))
                    {
                        fi = new File_info();
                        fi.FromXML(cmd);
                    }
                }
                else
                {
                    bool flag = this.ReceiveFile(fi);
                    if (!flag)
                    {
                        break;
                    }
                    fi = null;
                }
            }
        }
Example #3
0
        public List <File_info> GetFilesList(string dir)
        {
            List <File_info> res = new List <File_info>();

            if (!this.ftp.IsConnected)
            {
                return(res);
            }
            if (!string.IsNullOrEmpty(dir))
            {
                try { this.ftp.ChangeDirectory(dir); }
                catch (Exception ex)
                {
                    if (this.errorLog != null)
                    {
                        this.errorLog.Add("RebexFTPsource error 2", "Directory error:\n" + ex.ToString());
                    }
                    return(res);
                }
            }

            FtpItemCollection fi_coll = null;

            try { fi_coll = this.ftp.GetList(); }
            catch (Exception ex)
            {
                if (this.errorLog != null)
                {
                    this.errorLog.Add("RebexFTPsource error 1", "GetList failed:\n" + ex.ToString());
                }
                return(res);
            }

            foreach (FtpItem item in fi_coll)
            {
                File_info fi = new File_info(item.Name);
                res.Add(fi);

                fi.mod_time = item.Modified;
                fi.size     = item.Length;
            }

            return(res);
        }
Example #4
0
        private void open_button_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                FileStream fs = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read);
                this.fileData_bts = new byte[fs.Length];
                fs.Read(this.fileData_bts, 0, this.fileData_bts.Length);
                fs.Close();

                this.filePath_textBox.Text = ofd.FileName;

                string fileName = ofd.FileName.Substring(ofd.FileName.LastIndexOf('\\') + 1);
                this.fileInfo = new File_info(fileName, this.fileData_bts.Length);

                File_info fi  = new File_info();
                string    xml = this.fileInfo.ToXML();
                fi.FromXML(xml);
            }
        }
Example #5
0
        private bool ReceiveFile(File_info fi)
        {
            byte[] fileBuffer    = new byte[fi.length];
            int    totalReceived = 0;

            while (totalReceived < fi.length)
            {
                try
                {
                    int count = this.connSocket.Receive(fileBuffer);
                    totalReceived += count;
                }
                catch
                {
                    Console.WriteLine("ClientSide_handler error 1: receive error");
                    return(false);
                }
            }

            SaveFileDialog sfd = new SaveFileDialog();

            sfd.FileName = fi.name;

            int    dotIndex = fi.name.LastIndexOf('.');
            string format   = fi.name.Substring(dotIndex + 1);

            sfd.Filter = format + "|*." + format;

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                FileStream fs = new FileStream(sfd.FileName, FileMode.Create);
                fs.Write(fileBuffer, 0, totalReceived);
                fs.Close();
                this.parentForm.AddInfo_to_UI("---> Done, receive file size: " + totalReceived);
            }

            return(true);
        }
Example #6
0
        static void Main(string[] args)
        {
            //파일목록 로드
            List <File_info> file_list = new List <File_info>();
            DirectoryInfo    info      = new DirectoryInfo("./files");

            //DirectoryInfo : 특정 폴더안에 있는 파일을 접근/ 폴더 생성, 이동 할때 사용하는 클래스
            //GetFiles : 접근한 폴더안에 있는 파일정보들을 추출하는 메소드

            //var : 프로그램이 시작하기전 해당 변수에 대입된 자료형/클래스를 보고 자동으로 자료형/클래스 맞게 변수를 선언해주는 문법
            //foreach (var fileInfo in info.GetFiles())
            //C# 개발자가 만든 Fileinfo 클래스에서 마일명/ 사이즈를 추출 및 저장
            foreach (FileInfo fileInfo in info.GetFiles())
            {
                File_info file_Info = new File_info();
                file_Info.filename = fileInfo.Name;
                file_Info.filesize = fileInfo.Length;
                file_list.Add(file_Info);
            }

            //서버 생성 - 10000번 포트 사용
            TcpListener listener = new TcpListener(11000);

            //클라이언트 연결 허용
            listener.Start();
            TcpClient     client;
            NetworkStream net_stream;
            FileStream    file_stream;

            byte[]          datas = new byte[1024];
            int             data_size;
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Binder = new AllowAllAssemblyVersionsDeserializationBinder();
            //무한반복 - 여러 클라이언트 접속 처리용도
            while (true)
            {
                //클라이언트 연결
                client     = listener.AcceptTcpClient();
                net_stream = client.GetStream();
                //반복 - 클라이언트가 연결을 끊을때까지
                for (; ;)
                {
                    //파일목록을 저장한 변수를 클라이언트에게 송신
                    //List 객체를 네트워크로 송신할 수 없기 때문에
                    //List 객체를 배열로 바꿔 송신함
                    formatter.Serialize(net_stream, file_list.ToArray());
                    //클라이언트가 보낸 데이터 수신 - 기능선택
                    int select = (int)formatter.Deserialize(net_stream);
                    //조건문 - 클라이언트가 요청한 기능을 처리
                    if (select > 0)//다운로드 요청
                    {
                        //사용자관점의 번호 -> 인덱스번호
                        select--;
                        //해당 인덱스에 있는 파일정보를 통해 파일 읽기 모드로 접근
                        file_stream = File.OpenRead("./files/" + file_list[select].filename);
                        //파일사이즈를 1024로 나눈만큼 반복
                        for (int i = 0; i < file_stream.Length / 1024f; i++)
                        {
                            //파일 읽기 및 네트워크에 송신
                            data_size = file_stream.Read(datas, 0, datas.Length);
                            net_stream.Write(datas, 0, data_size);
                        }
                        //파일닫기
                        file_stream.Close();
                    }
                    else if (select == 0)//업로드 요청
                    {
                        //업로드할 파일의 정보를 수신 - File_info 객체
                        File_info new_fileinfo = (File_info)formatter.Deserialize(net_stream);
                        //file_list 객체에 수신된 객체 추가
                        file_list.Add(new_fileinfo);
                        //수신된 객체에 저장된 파일 이름으로 파일 생성
                        file_stream = File.Create("./files/" + new_fileinfo.filename);
                        //클라이언트가 보낸 파일데이터를 수신 및 파일에 쓰기
                        for (int i = 0; i < new_fileinfo.filesize / 1024f; i++)
                        {
                            data_size = net_stream.Read(datas, 0, datas.Length);
                            file_stream.Write(datas, 0, data_size);
                        }
                        //파일 접근 종료
                        file_stream.Close();
                    }
                    else//연결종료
                    {
                        break;
                    }
                }
                net_stream.Close();
                client.Close();
            }
            listener.Stop();
        }
Example #7
0
        static void Main(string[] args)
        {
            //서버연결
            TcpClient client = new TcpClient("127.0.0.1", 11000);

            //반복문에서 사용할 파일 스트림, 바이트배열등 선언
            byte[]          datas = new byte[1024];
            int             data_size, i;
            NetworkStream   net_stream = client.GetStream();
            FileStream      file_stream;
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Binder = new AllowAllAssemblyVersionsDeserializationBinder();
            //반복 - 연결을 종료하는 입력이 들어올때까지
            for (; ;)
            {
                //파일목록을 수신
                File_info[] file_list = (File_info[])formatter.Deserialize(net_stream);
                //반복 - 파일목록을 콘솔창에 출력
                Console.WriteLine("번호\t\t파일명\t\t파일크기");
                Console.WriteLine("-------------------------------------------------");
                for (i = 0; i < file_list.Length; i++)
                {
                    Console.WriteLine("{2}\t\t{0}\t\t{1}", file_list[i].filename, file_list[i].filesize, i + 1);
                }
                //다운로드/업로드 입력 받기
                Console.Write("메뉴선택 다운로드(번호입력) 업로드(0입력) 종료(음수입력) : ");
                i = int.Parse(Console.ReadLine());
                //조건문 -입력에 따른 코드 처리
                if (i > 0) // 다운로드
                {
                    //서버에 사용자 입력을 송신
                    formatter.Serialize(net_stream, i);
                    //사용자관점의 번호 -> 인덱스 번호로 변경
                    i--;
                    //파일 생성
                    file_stream = File.Create("./" + file_list[i].filename);
                    //반복 - 파일 사이즈 / 1024만큼 반복
                    for (int j = 0; j < file_list[i].filesize / 1024f; j++)
                    {
                        //네트워크의 데이터 수신 및 수신데이터를 파일에 쓰기
                        data_size = net_stream.Read(datas, 0, datas.Length);
                        file_stream.Write(datas, 0, data_size);
                    }
                    //파일 종료
                    file_stream.Close();
                    Console.WriteLine("{0} 다운로드 완료", file_list[i].filename);
                }
                else if (i == 0)  //업로드
                {
                    string path = "";
                    //업로드할 파일의 경로를 사용자 입력 받음
                    do
                    {
                        Console.Write("업로드할 파일을 입력 (확장자명포함): ");
                        path = Console.ReadLine();
                        //파일열기
                        try {
                            file_stream = File.OpenRead(path);
                            break;
                        }
                        catch //사용자가 입력한 문자열을 통해 파일을 찾을 수 없는 경우
                        {
                            Console.WriteLine("존재하지않는 파일입니다.");
                        }
                    } while (true);
                    File_info new_info = new File_info();
                    //문자열.Split() : 매개변수로 들어간 문자열 단위로 분리시키는 정적함수
                    //파일경로에서 \\마지막 부분에 파일 이름, 확자자명, 문자열이 있으므로Split함수에서 반환되는 문자열의 마지막 인덱스 값을 파일
                    string[] splitstr = file_stream.Name.Split('\\');
                    string   filename = splitstr[splitstr.Length - 1];

                    new_info.filename = filename;
                    new_info.filesize = file_stream.Length;
                    //사용자입력을 송신
                    formatter.Serialize(net_stream, i);
                    //File_info 객체 송신
                    formatter.Serialize(net_stream, new_info);
                    //업로드할 파일데이터 송신
                    for (i = 0; i < new_info.filesize / 1024f; i++)
                    {
                        data_size = file_stream.Read(datas, 0, datas.Length);
                        net_stream.Write(datas, 0, data_size);
                    }
                    file_stream.Close();
                }
                else //연결종료
                {
                    formatter.Serialize(net_stream, i);
                    break;
                }
            }
            net_stream.Close();
            client.Close();
        }