Archive

Java Day 24 네트워크

|

Java Day 24 네트워크


  1. 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
    */
    


  2. 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) {}
    		}
    	}
    


  3. 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) {}
    		}
    	}
    }
    


  4. socket 클래스

    • 자바에서는 소켓을 이용해 네트워크 통신을 한다.
    • TCP/IP 계층의 TCP를 지원하기 위해서 Socket, ServerSocket 클래스를 제공하고 있다.
    • 클라이언트는 Socket 객체를 생성하여 TCP 서버와 연결을 시도한다.
    • 서버는 SocketServer 객체를 생성하여 TCP연결을 청취하여 클라이언트와 연결한다.
    • 생성자

    생성자

    • 호스트를 찾을 수 없거나, 서버의 포트가 열려있지 않은 경우 UnknownHostException 발생
    • 네트워크 실패, 방화벽으로 인해 서버에 접근할 수 없는 경우 IOException 발생


  5. 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();
    	}
    }
    




참고 자료


이것이자바다

자바프로그래밍100% 실전가이드

KG아이티뱅크 자바 강의자료