개인 자료란 (JE)

  서버 커뮤니티


Profile HAN1110 대표칭호 없음

HAN1110 9899e780ba984d89824a90ee8deb7cb2

Profile

강좌 및 개발 개발자란 개발자 강좌 일반 프로그래밍

[Java] 자바로 서버 만들기 #1 - 와 , 자바로 이런걸 만들수 있다고?? & IP 얻기

2021.11.06 조회 수 468 추천 수 0

시작전 출처는 "쉽게 배우는 자바 프로그래밍" 입니다.


주의! 해당 강좌는 Java 의 기초문법(Scanner 와 if , while문) 을 할줄 아는사람을 기준으로 제작되였습니다.


안녕하세요! HAN1110 입니다!

오늘은 자바로 서버를 만들어보겠습니다.

그 전 기초로 , IP 주소를 얻어보겠습니다.

클래스를 만들어야겠죠?

전 IntelliJ Idea Community 를 사용하겠습니다.

b0433f9badc0d411735d202f86b8488c.png

b758e88be7b7a0d0e875ceea93f65a80.png

6a4c576ee4e2bc7cfae394dedd15b7d8.png

기초 작업은 끝났네요! 이제 서버가 무엇인지 알아보겠습니다

서버는 쉽게 말해서 , 저희가 접속하는 이 한마포같은겁니다!

한마포 프리루트님 컴퓨터같은거죠.

저희는 클라이언트로 한마포에 접속해 IP 를 얻지 않고

네이버 IP 를 얻어보겠습니다.

어차피 님들 해킹 못하잖아요?

잘 응용 할겁니다.

a7277b72c3ed0e0f617810c5a173c924.png

패키지 만들고 ~

2b52e418fcc118d6bf00ba491d123829.png

하위 패키지 만들고~

f83350b84c90396ede4f6dea148401ec.png

클래스 만들고~

다 끝났네요.

메인 메소드 만들어줍시다.

package net.koreaminecraft.IPAdd;

public class IPAdded {
    public static void main(String[] args) {
        
    }
}

참 쉽죠?  여기까지는 말이죠.

이제 어려워집니다.

package net.koreaminecraft.IPAdd;

public class IPAdded {
    public static void main(String[] args) {
        InetAddress add1 = null, add2 = null;
    }
}

InetAddress 는... InternetAddress의 줄임말이라고 생각하시면 됩니다!

IP 번호와 URL 을 조사할때 사용되죠.

어라? 에러가 나네요. 살펴봅시다.

3470008b5a94c7bf8befd65493552df7.png

당연히 오류가 날겁니다!
InetAddress 는 java.util 패키지에 있으니 말이죠.

당장 임포트해줍시다.

임포트해준 뒤엔a1916cc02960a5c9437fb7c88c86bd30.png

오류 없이 정상이네요!

이제 글자를 출력하고 도메인을 입력받아봅시다.

전 추가 라이브러리를 만들어서

package net.koreaminecraft.IPAdd;

import java.net.InetAddress;
import java.util.Scanner;
import net.koreaminecraft.IPAdd.Library.Terminals;

public class IPAdded extends Terminals {
    public static void main(String[] args) {
        InetAddress add1 = null, add2 = null;
        Terminal("호스트 이름을 입력하세요 : ");
        Scanner in = new Scanner(System.in);
        String url = in.nextLine();
    }
}

이 코드를 쓰겠습니다.

만약 여러분들이 인텔리제이에 라이브러리를 넣는법을 아신다면

이곳에 @HAN1110 을 붙여 멘션을 해주세요!

Scanner 은 건너뛰겠습니다.

그걸 모르면 안되니까요.

전 서버의 기초강좌를 하고있는거지 Java 자체의 기초강좌를 하는게 아닙니다. 그러니 이해해주세요

자. 이제 try 문이 사용될겁니다.

Try 문은 에러가 났을때 다른 실행문으로 넘겨주기 위한 실행문입니다.

100번 듣는거보다 1번 체험하는게 낫겠죠?

package net.koreaminecraft.IPAdd;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
import net.koreaminecraft.IPAdd.Library.Terminals;

public class IPAdded extends Terminals {
    public static void main(String[] args) {
        InetAddress addr1 = null, addr2 = null;
        Terminal("호스트 이름을 입력하세요 : ");
        Scanner in = new Scanner(System.in);
        String url = in.nextLine();

        try {
            addr1 = InetAddress.getByName(url);
            addr1 = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            
        }
    }
}

한번 실행해볼까요?

7afe192e9a3358119a31d7227b3c7798.png

출력이 안되니 아무 반응도 없는겁니다.

일단 그걸 증명하기위해 하나의 catch 를 더 만들게요.

package net.koreaminecraft.IPAdd;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
import net.koreaminecraft.IPAdd.Library.Terminals;

public class IPAdded extends Terminals {
    public static void main(String[] args) {
        InetAddress addr1 = null, addr2 = null;
        Terminal("호스트 이름을 입력하세요 : ");
        Scanner in = new Scanner(System.in);
        String url = in.nextLine();

        try {
            addr1 = InetAddress.getByName(url);
            addr1 = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            Terminal("UnknownHostException");
        } catch (Exception e) {
            Terminal("Exception");
        }
    }
}

그리고 정상적으로 실행됬을시 작동하게 하는 구문도 만들게요.

package net.koreaminecraft.IPAdd;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
import net.koreaminecraft.IPAdd.Library.Terminals;

public class IPAdded extends Terminals {
    public static void main(String[] args) {
        InetAddress addr1 = null, addr2 = null;
        Terminal("호스트 이름을 입력하세요 : ");
        Scanner in = new Scanner(System.in);
        String url = in.nextLine();

        try {
            addr1 = InetAddress.getByName(url);
            addr1 = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            Terminal("UnknownHostException");
        } catch (Exception e) {
            Terminal("Exception");
        }

        Terminal(url + "의 IP 주소 : ");
        Terminal(addr1.getHostAddress());
        Terminal("로컬 IP 주소");
        Terminal(addr2.getHostAddress() + "");
    }
}

아닌것같지만 최종 구문입니다.

이제 실행해보죠.

8ac870085494a11991f17e3c148102bf.png

실행해보죠.

(에러가 일어나서

package net.koreaminecraft.IPAdd;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Scanner;
import net.koreaminecraft.IPAdd.Library.Terminals;

public class IPAdded extends Terminals {
    public static void main(String[] args) {
        InetAddress addr1 = null, addr2 = null;
        Terminal("호스트 이름을 입력하세요 : ");
        Scanner in = new Scanner(System.in);
        String url = in.nextLine();

        try {
            addr1 = InetAddress.getByName(url);
            addr1 = InetAddress.getLocalHost();
        } catch (UnknownHostException e) {
            Terminal("UnknownHostException");
        } catch (Exception e) {
            Terminal("Exception");
        }

        try {
            TerminalII(url + "의 IP 주소 : ");
            Terminal(addr1.getHostAddress());
            TerminalII("로컬 IP 주소");
            Terminal(addr2.getHostAddress());
        } catch (Exception e) {
            TerminalII(url + "의 IP 주소 : ");
            Terminal(addr1.getHostAddress());
            TerminalII("로컬 IP 주소");
        }
    }
}

로 바꿧습니다)

69f1df3e9de1df9b8a0acbf9eb71ab12.png

제 IP 주소만 나오네요.

여기서 cmd 로 ipconfig 를 한것과 같아요.

좋습니다!

이게 어떻게 된 일이냐면 마지막 try 문에서 오류가 난겁니다.

끝 ~

ㅂㅂ


27개의 댓글

허두
2021.11.06

라이브러리 사용하실거면 gradle 이용하시는거 추천..!

근데 한마포는 AWS 쓰는ㄷ

HAN1110
2021.11.07
@허두

데이타베이스 안써서

자바 기본 라이브러리만 사용해요.

얘 끝나면 GUI 강좌도 할겁니다.

허두
2021.11.07
@HAN1110

아, 그러다보니 Terminals 클래스는 어떤 클래스인가용?

HAN1110
2021.11.07
@허두

제가 개발한 그 "라이브러리" 입니다

System.out.println(String);

Terminal(String);

으로 줄여주죠.

인텔리제이에 어떻게 라이브러리 적용하는지만

알려주시면 배포해드리죠.

허두
2021.11.07
@HAN1110

느낌상

public class Terminals {
  private static void Terminal(String str) {
    System.out.println(str);
  }
}

일것만 같은 느낌이 드는구만유


라이브러리 적용하는 방법으로 gradle을 알려드린건데요..?

굳이 그 쉬운 툴을 쓰고싶지 않으시다면야..

프로젝트 루트 폴더 우클릭 -> Open Module Settings -> Libraries -> + 버튼 -> Java -> .jar 파일 선택 -> OK

HAN1110
2021.11.09
@허두

와우!!!! 배포할게요.

그리고 거의 비슷한데요? ㅋㅋㅋ

(+ 잠깐!!!! 자바는 같은 패키지에 상속을 받았더라도 private 메서드에 접근 못합니다. 특히나 패키지도 다르니 private 은 못하겠죠?)

허두
2021.11.09
@HAN1110

으앗.. private가 익숙해서리..ㅋㅋㅋ

@HAN1110

전 귀찮으니 log4j나 slf4j를 쓰겠습니다 ㅎㅎ

 

라이브러리 적용은 jar 파일을 다른사람에게 전달하는걸로도 intellij에서 적용이 가능합니다

사실 라이브러리 적용같은경우는 maven, gradle을 쓰는게 제일 편하죠

maven-publish를 이용해서 하는경우가 대부분입니다(버킷 파일같은 저작권 문제가 있는경우 제외)

근데 이 프로젝트가 gradle이나 maven이 아니라서 maven-publish는 안되겠네유

HAN1110
2022.01.17
@하이라이트|highright

네. 원하신다면 maven 버전으로 만들어드립니다.

@HAN1110

아악 gradle...... 써주세요

HAN1110
2022.01.19
@하이라이트|highright

알겠습니다. KOR V2 에 Gradle 버전과 일반버전 둘다 드릴게요

패치지 이름.............

프로젝트
2021.11.09

라이브러리 배포는 Gradle이 짱이죠 ㅋㅋㅋ

HAN1110
2021.11.09
@프로젝트

예? 저 사용법 모릅니다.

@HAN1110

예전에 API로 플러그인 만드는거 강좌에 올린게 gradle입니다

HAN1110
2021.11.29
@하이라이트|highright

끄허억!

몰랐어요!

WintChoco
2022.01.03

혹시 자바 stack trace기능 아시나요?

Exception.printStackTrace();로 출력할수있는데, 저렇에 오류 이름 출력하는거보다 더 편하구 오류 해결하기도 쉬워요

HAN1110
2022.01.04
@WintChoco

저거 와이파이 연결 안되서 그런겁니다.

WintChoco
2022.01.04
@HAN1110

? 와이파이랑 관련이 있나요

HAN1110
2022.01.04
@WintChoco

WintChoco
2022.01.04
@HAN1110

저건 그냥 자바 코드인데요... 와이파이랑은 상관 없을텐데요

HAN1110
2022.01.05
@WintChoco

상관 있습니다. ㅎㅎ

WintChoco
2022.01.05
@HAN1110

글구 전 Terminal("UnknownHostException");부분을e.printStackTrace();로 고치는게 더 편하다는 말을 한거구요

HAN1110
2022.01.05
@WintChoco

아;;

HAN1110
2022.01.05
@하이라이트|highright

저거 오류 와파때문이라고요.

그때 와이파이 연결 안됬었어요

@HAN1110

그 전에 addr2가 null이긴 하니까 이야기 했습니다