Windows ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ ์†Œํ”„ํŠธ์›จ์–ด ์ž‘์„ฑ, 02๋ถ€

Windows ์ฝ˜์†” ์œ ํ‹ธ๋ฆฌํ‹ฐ์˜ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์— ๊ด€ํ•œ ์ง€์†์ ์ธ ๊ธฐ์‚ฌ ์‹œ๋ฆฌ์ฆˆ๋ฅผ ๊ณ„์†ํ•˜๋ฉด์„œ ๊ฐ„๋‹จํ•œ ํŒŒ์ผ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ธ TFTP(Trivial File Transfer Protocol)์— ๋Œ€ํ•ด ๋‹ค๋ฃจ์ง€ ์•Š์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์ง€๋‚œ๋ฒˆ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๊ฐ„๋‹จํžˆ ์ด๋ก ์„ ์‚ดํŽด๋ณด๊ณ , ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๊ณผ ์œ ์‚ฌํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ณด๊ณ  ๋ถ„์„ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ - ์ปท ์•„๋ž˜

์ „ํ†ต์ ์œผ๋กœ ๊ธฐ์‚ฌ ๋๋ถ€๋ถ„์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋งํฌ์ธ ์ฐธ์กฐ ์ •๋ณด๋ฅผ ๋ณต์‚ฌํ•˜์—ฌ ๋ถ™์—ฌ๋„ฃ์ง€๋Š” ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ํ•ต์‹ฌ์ ์œผ๋กœ TFTP๋Š” ์•ก์„ธ์Šค ์ œ์–ด ์„ค์ •์ด ์žˆ๋Š” FTP ํ”„๋กœํ† ์ฝœ์˜ ๋‹จ์ˆœํ™”๋œ ๋ณ€ํ˜•์ด๋ผ๊ณ ๋งŒ ๋ง์”€๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค. ์ œ๊ฑฐ๋˜์—ˆ์œผ๋ฉฐ ์‹ค์ œ๋กœ ํŒŒ์ผ ์ˆ˜์‹  ๋ฐ ์ „์†ก ๋ช…๋ น ์™ธ์—๋Š” ์•„๋ฌด๊ฒƒ๋„ ์—†์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ตฌํ˜„์„ ์ข€ ๋” ์šฐ์•„ํ•˜๊ฒŒ ๋งŒ๋“ค๊ณ  ํ˜„์žฌ ์ฝ”๋“œ ์ž‘์„ฑ ์›์น™์— ๋งž๊ฒŒ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ตฌ๋ฌธ์ด ์•ฝ๊ฐ„ ๋ณ€๊ฒฝ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋กœ ์ธํ•ด ์ž‘๋™ ์›์น™์ด ๋ณ€๊ฒฝ๋˜์ง€๋Š” ์•Š์ง€๋งŒ ์ธํ„ฐํŽ˜์ด์Šค IMHO๋Š” ์ข€ ๋” ๋…ผ๋ฆฌ์ ์ด๊ณ  FTP์™€ TFTP์˜ ๊ธ์ •์ ์ธ ์ธก๋ฉด์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ, ์‹œ์ž‘๋˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ์„œ๋ฒ„์˜ IP ์ฃผ์†Œ์™€ ์‚ฌ์šฉ์ž ์ •์˜ TFTP๊ฐ€ ์—ด๋ ค ์žˆ๋Š” ํฌํŠธ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค(ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ๊ณผ์˜ ๋น„ํ˜ธํ™˜์„ฑ์œผ๋กœ ์ธํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ํฌํŠธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•จ). ์—ฐ๊ฒฐ์ด ๋ฐœ์ƒํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” get ๋˜๋Š” put ๋ช…๋ น ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณด๋‚ด ์„œ๋ฒ„์— ํŒŒ์ผ์„ ๋ฐ›๊ฑฐ๋‚˜ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํŒŒ์ผ์€ ๋…ผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ๋กœ ์ „์†ก๋ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ „ํ†ต์ ์œผ๋กœ 4๊ฐ€์ง€ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

  • TFTPํด๋ผ์ด์–ธํŠธ
  • TFTP์„œ๋ฒ„
  • TFTPํด๋ผ์ด์–ธํŠธํ…Œ์Šคํ„ฐ
  • TFTP์„œ๋ฒ„ํ…Œ์Šคํ„ฐ

ํ…Œ์ŠคํŠธ ํด๋ž˜์Šค๋Š” ์ฃผ์š” ํด๋ž˜์Šค ๋””๋ฒ„๊น…์„ ์œ„ํ•ด์„œ๋งŒ ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ„์„ํ•˜์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ์ฝ”๋“œ๋Š” ์ €์žฅ์†Œ์— ์žˆ์„ ๊ฒƒ์ด๋ฉฐ ์ด์— ๋Œ€ํ•œ ๋งํฌ๋Š” ๊ธฐ์‚ฌ ๋๋ถ€๋ถ„์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ฃผ์š” ์ˆ˜์—…์„ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

TFTPํด๋ผ์ด์–ธํŠธ

์ด ํด๋ž˜์Šค์˜ ์ž„๋ฌด๋Š” IP์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋กœ ์›๊ฒฉ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ณ , ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ(์ด ๊ฒฝ์šฐ ํ‚ค๋ณด๋“œ)์—์„œ ๋ช…๋ น์„ ์ฝ๊ณ , ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๊ณ , ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ๋ณด๋‚ด๊ฑฐ๋‚˜ ๋ฐ›๊ณ , ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•˜๊ณ  ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์˜ ๋ช…๋ น์„ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ํด๋ผ์ด์–ธํŠธ๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์‚ฌ์šฉ๋˜๋Š” ์—ฌ๋Ÿฌ ์ „์—ญ ๋ณ€์ˆ˜๋Š” ๊ธฐ์‚ฌ ์™ธ๋ถ€์˜ ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด ํ…์ŠคํŠธ์— ์„ค๋ช…๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์‚ฌ์†Œํ•จ ๋•Œ๋ฌธ์— ๊ธฐ์‚ฌ์— ๊ณผ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ์ง€ ์•Š๋„๋ก ์ธ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 public void run(String ip, int port)
    {
        this.ip = ip;
        this.port = port;
        try {
            inicialization();
            Scanner keyboard = new Scanner(System.in);
            while (isRunning) {
                getAndParseInput(keyboard);
                sendCommand();
                selector();
                }
            }
        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

์ด ์ฝ”๋“œ ๋ธ”๋ก์—์„œ ํ˜ธ์ถœ๋˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ํŒŒ์ผ์ด ์ „์†ก๋ฉ๋‹ˆ๋‹ค. ์Šค์บ๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ๋‚ด์šฉ์„ ๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ์†Œ์ผ“์— ํ•˜๋‚˜์”ฉ ์“ด ๋‹ค์Œ ํŒŒ์ผ์„ ๋‹ซ์•˜๋‹ค๊ฐ€ ๋‹ค์‹œ ์—ฝ๋‹ˆ๋‹ค(๊ฐ€์žฅ ํ™•์‹คํ•œ ํ•ด๊ฒฐ์ฑ…์€ ์•„๋‹ˆ์ง€๋งŒ ์ด๋Š” ๋ฆฌ์†Œ์Šค ํ•ด์ œ๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค. ๊ทธ ํ›„ ์„ฑ๊ณต์ ์ธ ์ „์†ก์— ๋Œ€ํ•œ ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

private  void put(String sourcePath, String destPath)
    {

        File src = new File(sourcePath);
        try {

            InputStream scanner = new FileInputStream(src);
            byte[] bytes = scanner.readAllBytes();
            for (byte b : bytes)
                sout.write(b);
            sout.close();
            inicialization();
            System.out.println("nDonen");
            }

        catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

์ด ์ฝ”๋“œ ๋‹จํŽธ์€ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ฒƒ์ด ๋‹ค์‹œ ์‚ฌ์†Œํ•˜๋ฉฐ ์ฒซ ๋ฒˆ์งธ ์ฝ”๋“œ ๋ธ”๋ก๋งŒ ๊ด€์‹ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์ผ“์—์„œ ์ฝ์–ด์•ผ ํ•˜๋Š” ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๋ ค๋ฉด ์ „์†ก๋œ ํŒŒ์ผ์˜ ๋ฌด๊ฒŒ๋ฅผ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„œ๋ฒ„์˜ ํŒŒ์ผ ํฌ๊ธฐ๋Š” ๊ธด ์ •์ˆ˜๋กœ ํ‘œ์‹œ๋˜๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ๋Š” 4๋ฐ”์ดํŠธ๊ฐ€ ํ—ˆ์šฉ๋˜๋ฉฐ ์ดํ›„์—๋Š” ํ•˜๋‚˜์˜ ์ˆซ์ž๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” Java ์ ‘๊ทผ ๋ฐฉ์‹์ด ์•„๋‹ˆ๋ฉฐ SI์™€ ์œ ์‚ฌํ•˜์ง€๋งŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ„๋‹จํ•ด์ง‘๋‹ˆ๋‹ค. ์†Œ์ผ“์—์„œ ์•Œ๋ ค์ง„ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ์ˆ˜์‹ ํ•˜์—ฌ ํŒŒ์ผ์— ์“ด ํ›„ ์„ฑ๊ณต ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

   private void get(String sourcePath, String destPath){
        long sizeOfFile = 0;
        try {


            byte[] sizeBytes = new byte[Long.SIZE];
           for (int i =0; i< Long.SIZE/Byte.SIZE; i++)
           {
               sizeBytes[i] = (byte)sin.read();
               sizeOfFile*=256;
               sizeOfFile+=sizeBytes[i];
           }

           FileOutputStream writer = new FileOutputStream(new File(destPath));
           for (int i =0; i < sizeOfFile; i++)
           {
               writer.write(sin.read());
           }
           writer.close();
           System.out.println("nDONEn");
       }
       catch (Exception e){
            System.out.println(e.getMessage());
       }
    }

ํด๋ผ์ด์–ธํŠธ ์ฐฝ์— get ๋˜๋Š” put ์ด์™ธ์˜ ๋ช…๋ น์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ showErrorMessage ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์–ด ์ž…๋ ฅ์ด ์ž˜๋ชป๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์‚ฌ์†Œํ•ด์„œ ์ธ์šฉํ•˜์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ํฅ๋ฏธ๋กœ์šด ์ ์€ ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ์ˆ˜์‹ ํ•˜๊ณ  ๋ถ„ํ• ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์Šค์บ๋„ˆ๋ฅผ ์—ฌ๊ธฐ์— ์ „๋‹ฌํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ๊ณต๋ฐฑ์œผ๋กœ ๊ตฌ๋ถ„๋˜๊ณ  ๋ช…๋ น, ์†Œ์Šค ์ฃผ์†Œ ๋ฐ ๋Œ€์ƒ ์ฃผ์†Œ๊ฐ€ ํฌํ•จ๋œ ์ค„์„ ๋ฐ›์„ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

    private void getAndParseInput(Scanner scanner)
    {
        try {

            input = scanner.nextLine().split(" ");
            typeOfCommand = input[0];
            sourcePath = input[1];
            destPath = input[2];
        }
        catch (Exception e) {
            System.out.println("Bad input");
        }
    }

๋ช…๋ น ๋ณด๋‚ด๊ธฐ - ์Šค์บ๋„ˆ์—์„œ ์ž…๋ ฅํ•œ ๋ช…๋ น์„ ์†Œ์ผ“์œผ๋กœ ์ „์†กํ•˜๊ณ  ๊ฐ•์ œ๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.

    private void sendCommand()
    {
        try {

            for (String str : input) {
                for (char ch : str.toCharArray()) {
                    sout.write(ch);
                }
                sout.write(' ');
            }
            sout.write('n');
        }
        catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

์„ ํƒ๊ธฐ๋Š” ์ž…๋ ฅ๋œ ๋ฌธ์ž์—ด์— ๋”ฐ๋ผ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘์„ ๊ฒฐ์ •ํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฒƒ์€ ๋ณ„๋กœ ์•„๋ฆ„๋‹ต์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ๋œ ํŠธ๋ฆญ์€ ์ฝ”๋“œ ๋ธ”๋ก ์™ธ๋ถ€์—์„œ ๊ฐ•์ œ ์ข…๋ฃŒํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ํŠธ๋ฆญ์€ ์•„๋‹ˆ์ง€๋งŒ, ๊ทธ ์ฃผ๋œ ์ด์œ ๋Š” Java์— C#์˜ ๋Œ€๋ฆฌ์ž, C++์˜ ํ•จ์ˆ˜ ํฌ์ธํ„ฐ ๋˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ๋”์ฐํ•˜๊ณ  ๋”์ฐํ•œ goto๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ์•„๋ฆ„๋‹ต๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ์šฐ์•„ํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ๊ณ„์‹œ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋น„ํŒ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋ฌธ์ž์—ด ์œ„์ž„ ์‚ฌ์ „์ด ํ•„์š”ํ•œ ๊ฒƒ ๊ฐ™์€๋ฐ ์œ„์ž„์ž๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค...

    private void selector()
    {
        do{
            if (typeOfCommand.equals("get")){
                get(sourcePath, destPath);
                break;
            }
            if (typeOfCommand.equals("put")){
                put(sourcePath, destPath);
                break;
            }
            showErrorMessage();
        }
        while (false);
    }
}

TFTP์„œ๋ฒ„

์„œ๋ฒ„์˜ ๊ธฐ๋Šฅ์€ ๋ช…๋ น์ด ํ‚ค๋ณด๋“œ๊ฐ€ ์•„๋‹Œ ์†Œ์ผ“์—์„œ ์ „๋‹ฌ๋œ๋‹ค๋Š” ์ ์—์„œ๋งŒ ํด๋ผ์ด์–ธํŠธ์˜ ๊ธฐ๋Šฅ๊ณผ ๋Œ€์ฒด๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ์ผ๋ถ€ ๋ฐฉ๋ฒ•์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•˜๋ฏ€๋กœ ์ธ์šฉํ•˜์ง€ ์•Š๊ณ  ์ฐจ์ด์ ๋งŒ ๋‹ค๋ฃจ๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๋ ค๋ฉด ํฌํŠธ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๊ณ  ์†Œ์ผ“์˜ ์ž…๋ ฅ ๋ฐ์ดํ„ฐ๋ฅผ ์˜์›ํ•œ ๋ฃจํ”„๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” run ๋ฉ”์„œ๋“œ๊ฐ€ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

    public void run(int port) {
            this.port = port;
            incialization();
            while (true) {
                getAndParseInput();
                selector();
            }
    }

ํŒŒ์ผ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์ŠคํŠธ๋ฆผ์„ ์—ด๊ณ  ์†Œ์ผ“์˜ ๋ชจ๋“  ์ž…๋ ฅ ๋ฐ”์ดํŠธ๋ฅผ ์“ฐ๋Š” writeToFileFromSocket ๋ฉ”์„œ๋“œ๋ฅผ ๋ž˜ํ•‘ํ•˜๋Š” put ๋ฉ”์„œ๋“œ๋Š” ์“ฐ๊ธฐ๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ „์†ก์ด ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.

    private  void put(String source, String dest){
            writeToFileFromSocket();
            System.out.print("nDonen");
    };
    private void writeToFileFromSocket()
    {
        try {
            FileOutputStream writer = new FileOutputStream(new File(destPath));
            byte[] bytes = sin.readAllBytes();
            for (byte b : bytes) {
                writer.write(b);
            }
            writer.close();
        }
        catch (Exception e){
            System.out.println(e.getMessage());
        }
    }

get ๋ฉ”์†Œ๋“œ๋Š” ์„œ๋ฒ„ ํŒŒ์ผ์„ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์˜ ํด๋ผ์ด์–ธํŠธ ์ธก ์„น์…˜์—์„œ ์ด๋ฏธ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํŒŒ์ผ์„ ์„ฑ๊ณต์ ์œผ๋กœ ์ „์†กํ•˜๋ ค๋ฉด ๊ธด ์ •์ˆ˜๋กœ ์ €์žฅ๋œ ํฌ๊ธฐ๋ฅผ ์•Œ์•„์•ผ ํ•˜๋ฏ€๋กœ ์ด๋ฅผ 4๋ฐ”์ดํŠธ ๋ฐฐ์—ด๋กœ ๋ถ„ํ• ํ•˜์—ฌ ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ „์†กํ•ฉ๋‹ˆ๋‹ค. ์†Œ์ผ“์— ์—ฐ๊ฒฐํ•œ ๋‹ค์Œ ํด๋ผ์ด์–ธํŠธ์—์„œ ์ด๋ฅผ ๋ฐ›์•„ ์ˆซ์ž๋กœ ๋‹ค์‹œ ์กฐํ•ฉํ•œ ํ›„ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ชจ๋“  ๋ฐ”์ดํŠธ๋ฅผ ํŒŒ์ผ์˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์—์„œ ์ฝ์€ ํ›„ ์ „์†กํ•ฉ๋‹ˆ๋‹ค.


 private  void get(String source, String dest){
        File sending = new File(source);
        try {
            FileInputStream readFromFile = new FileInputStream(sending);
            byte[] arr = readFromFile.readAllBytes();
            byte[] bytes = ByteBuffer.allocate(Long.SIZE / Byte.SIZE).putLong(sending.length()).array();
            for (int i = 0; i<Long.SIZE / Byte.SIZE; i++)
                sout.write(bytes[i]);
            sout.flush();
            for (byte b : arr)
                sout.write(b);
        }
        catch (Exception e){
            System.out.println(e.getMessage());
        }
    };

getAndParseInput ๋ฉ”์†Œ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ์™€ ๋™์ผํ•˜๋ฉฐ ์œ ์ผํ•œ ์ฐจ์ด์ ์€ ํ‚ค๋ณด๋“œ๊ฐ€ ์•„๋‹Œ ์†Œ์ผ“์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” ์„ ํƒ๊ธฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ €์žฅ์†Œ์— ์žˆ์Šต๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™”๋Š” ๋ณ„๋„์˜ ์ฝ”๋“œ ๋ธ”๋ก์— ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌํ˜„ ๋‚ด์—์„œ๋Š” ์ „์†ก์ด ์™„๋ฃŒ๋œ ํ›„ ๋ฆฌ์†Œ์Šค๊ฐ€ ํ•ด์ œ๋˜๊ณ  ๋‹ค์‹œ ์ ์œ ๋˜์–ด ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

    private void  incialization()
    {
        try {
            serverSocket = new ServerSocket(port);
            socket = serverSocket.accept();
            sin = socket.getInputStream();
            sout = socket.getOutputStream();
        }
        catch (Exception e) {
            System.out.print(e.getMessage());
        }
    }

์š”์•ฝ :

์šฐ๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ์ „์†ก ํ”„๋กœํ† ์ฝœ์— ๋Œ€ํ•œ ๋ณ€ํ˜•์„ ์ž‘์„ฑํ•˜๊ณ  ๊ทธ๊ฒƒ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค. ์›์น™์ ์œผ๋กœ ๋‚˜๋Š” ์—ฌ๊ธฐ์„œ ๋ฏธ๊ตญ์„ ๋ฐœ๊ฒฌํ•˜์ง€ ๋ชปํ–ˆ๊ณ  ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋งŽ์ด ์“ฐ์ง€ ์•Š์•˜์ง€๋งŒ Habrรฉ์— ๋Œ€ํ•œ ์œ ์‚ฌํ•œ ๊ธฐ์‚ฌ๋Š” ์—†์—ˆ์œผ๋ฉฐ cmd ์œ ํ‹ธ๋ฆฌํ‹ฐ์— ๋Œ€ํ•œ ์ผ๋ จ์˜ ๊ธฐ์‚ฌ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ๊ณผ์ •์—์„œ ๊ทธ๊ฒƒ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ถˆ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๋งํฌ :

์†Œ์Šค ์ฝ”๋“œ ์ €์žฅ์†Œ
TFTP์— ๋Œ€ํ•ด ๊ฐ„๋žตํžˆ ์„ค๋ช…
๋˜‘๊ฐ™์€ ์ผ์ด์ง€๋งŒ ๋Ÿฌ์‹œ์•„์–ด๋กœ

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€