Java Day 24 네트워크
19 Jan 2021 | JavaJava Day 24 네트워크
-
InetAddress 클래스
- InetAddress 클래스는 IP 주소를 표현한 클래스이다.
- 자바에서는 모든 IP 주소를 InetAddress 클래스로 사용한다.
- 기본 생성자의 접근 제한자가 default이기 때문에 new 객체를 생성할 수 없다.
- 따라서, 객체를 생성해주는 5개의 static 메소드를 제공하고 있다.
- 이 메소드들은 반드시 UnknownHostException 예외 처리를 해야한다.
- 주요 메소드
import java.net.*; public class IdnetAddressEx { public static void main(String[] args) { //InetAddress는 ip정보와 Host정보를 가지는 객체 //InetAddress객체는 static 메소드를 이용해 생성 try { //Host이름에 해당되는 ip정보를 가진 InetAddress객체 얻기 InetAddress ipInfo1 = InetAddress.getByName("www.daum.net"); //ip주소 얻기 String ip = ipInfo1.getHostAddress(); System.out.println("ip 주소 : "+ip); //Host이름에 해당되는 ip정보를 가진 모든 InetAddress객체 얻기 InetAddress[] ipArray = InetAddress.getAllByName("www.daum.net"); for(InetAddress temp : ipArray) { System.out.println(temp); } //현재 컴퓨터의 ip정보를 가진 InetAddress객체 얻기 InetAddress myHost = InetAddress.getLocalHost(); System.out.println("Host : "+myHost.getHostName()); System.out.println("Host ip : "+myHost.getHostAddress()); } catch(UnknownHostException e) { e.printStackTrace(); } } } /** 실행결과 : ip 주소 : 203.133.167.16 www.daum.net/203.133.167.16 www.daum.net/211.231.99.80 Host : DESKTOP-xxxxxx Host ip : 192.xxx.xxx.x */
-
URL 클래스
- URL(Uniform Resource Locater)는 인터넷에서 접근 가능한 자원의 주소를 표현하는 형식
- 자바의 URL 클래스는 final이라 상속하여 사용할 수 없다.
- 모든 생성자는 MalformedURLException 예외처리를 해야한다.
- 생성자
- 주요 메소드
import java.io.*; import java.net.*; public class UrlEx { public static void main(String[] args) { BufferedReader br = null; try { //url 객체로부터 여러 정보들을 얻을 수 있다 URL url = new URL("http://daum.net/index.html"); System.out.println("프로토콜 : "+url.getProtocol()); System.out.println("호스트 : "+url.getHost()); System.out.println("포트번호 : "+url.getPort()); System.out.println("경로 : "+url.getPath()); System.out.println("파일 : "+url.getFile()); //보안상의 이유로 출력이 안될 수 있다 br = new BufferedReader(new InputStreamReader(url.openStream())); String str = null; while((str = br.readLine()) != null) { System.out.println(str); } } catch(MalformedURLException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } finally { try {if(br!=null)br.close();}catch(IOException e) {} } }
-
URLConnection 클래스
- URLConnection 클래스는 원격 자원에 접근하는데 필요한 정보를 가지고 있다.
- URL 클래스는 원격 서버 자원의 결과만을 가져오지만, URLConnection 클래스는 원격 서버 자원의 결과와 원격 서버의 헤더 정보를 가져올 수 있다.
- 주요 메소드
import java.net.*; import java.io.*; public class URLConnectionEx { public static void main(String[] args) { BufferedReader br = null; try { URL url = new URL("http://www.kgitbank.co.kr"); URLConnection uc = url.openConnection(); uc.connect(); String str = null; br = new BufferedReader(new InputStreamReader(uc.getInputStream())); while((str = br.readLine())!= null) { System.out.println(str); } } catch(MalformedURLException e) { e.printStackTrace(); } catch(IOException e) { e.printStackTrace(); } finally { try {if(br!=null)br.close();}catch(IOException e) {} } } }
-
socket 클래스
- 자바에서는 소켓을 이용해 네트워크 통신을 한다.
- TCP/IP 계층의 TCP를 지원하기 위해서 Socket, ServerSocket 클래스를 제공하고 있다.
- 클라이언트는 Socket 객체를 생성하여 TCP 서버와 연결을 시도한다.
- 서버는 SocketServer 객체를 생성하여 TCP연결을 청취하여 클라이언트와 연결한다.
- 생성자
- 호스트를 찾을 수 없거나, 서버의 포트가 열려있지 않은 경우 UnknownHostException 발생
- 네트워크 실패, 방화벽으로 인해 서버에 접근할 수 없는 경우 IOException 발생
-
ServerSocket 클래스
- ServerSocket 클래스가 TCP 서버 소켓을 의미한다.
- 클라이언트의 TCP 연결을 받기 위해서는 java.net.ServerSocket 클래스의 객체를 생성해야한다.
- ServerSocket 클래스는 네트워크 통신을 수행하기 위해 클라이언트의 TCP 요청에 대한 Socket 객체를 생성하는 역할을 한다.
- 클라이언트의 TCP 요청이 오면 accept() 메소드를 실행해 클라이언트와 통신할 수 있는 TCP 소켓을 반환한다.
- 다른 클라이언트의 요청이 있기까지 accept() 메소드는 대기상태에 들어간다.
- 클라이언트의 소켓과 서버에서는 accept() 메소드로 반환한 소켓으로 스트림을 생성하여 통신한다.
- ServerSocket 생성자는 TCP 포트번호를 매개변수로 받는다.
- 기존의 TCP 포트번호가 사용중이라면 IOException이 발생한다.
- 주요 메소드
/** * Server */ import java.net.*; import java.io.*; public class EchoServer { public EchoServer() { // 1. 서버소켓 생성 try { ServerSocket ss = new ServerSocket(5000); System.out.println("서버 대기중"); // 2. 클라이언트의 요청 대기 Socket s = ss.accept(); System.out.println("클라이언트 연결 - 소켓 생성"); // 접속한 클라이언트 정보 얻기 InetAddress ia = s.getInetAddress(); String ip = ia.getHostAddress(); System.out.println("["+ip+"] 접속"); // 3. 소켓으로부터 Input,OutputStream 얻기 InputStream is = s.getInputStream(); OutputStream os = s.getOutputStream(); BufferedReader br = new BufferedReader(new InputStreamReader(is)); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); // 4. 클라이언트가 전송한 메세지 읽기 String message = br.readLine(); System.out.println("[메세지] : "+message); // 5. 클라이언트에게 메세지 전송하기 bw.write("["+ip+"] 님 환영합니다.\n"); bw.flush(); } catch (IOException e) { // 지정한 포트번호가 사용중일시 예외 발생 System.out.println("해당 포트번호는 사용중입니다."); } } public static void main(String[] args) { new EchoServer(); } }
/** * Client */ import java.io.*; import java.net.*; public class EchoClient { public EchoClient() { try { // 1. 서버와 통신할 소켓 생성 Socket s = new Socket("localHost", 5000); // 2. 소켓으로부터 input,outputStream 얻기 OutputStream os = s.getOutputStream(); InputStream is = s.getInputStream(); BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os)); BufferedReader br = new BufferedReader(new InputStreamReader(is)); // 3. 서버에 메세지 전송하기 bw.write("나는 클라이언트다.\n"); bw.flush(); // 4. 서버가 보낸 메세지 받기 String message = br.readLine(); System.out.println("[서버가 보낸 메세지] : "+message); } catch(UnknownHostException e) { // ip에 해당하는 서버를 찾을 수 없는 경우 System.out.println("서버를 찾을 수 없습니다."); } catch(IOException e) { // 해당 포트번호에 어떤 서비스도 존재하지 않는 경우 System.out.println("사용할 수 없는 포트번호입니다."); } } public static void main(String[] args) { new EchoClient(); } }
참고 자료
KG아이티뱅크 자바 강의자료