https://www.youtube.com/playlist?list=PLieE0qnqO2kTyzAlsvxzoulHVISvO8zA9

InetAdress

네트워크 상의 정보를 얻어오는 클래스 (호스트의 IP 주소 등)

// InetAddressEx.java
package javanet;

import java.net.InetAddress;
import java.util.Scanner;

public class InetAddressEx {
	Scanner scanner;

	public InetAddressEx() {
		System.out.println("Host name: ");
		scanner = new Scanner(System.in);

		try {
			InetAddress inetAddress = InetAddress.getByName(scanner.next());
			System.out.println("Computer name: " + inetAddress.getHostName());
			System.out.println("Computer IP: "+inetAddress.getHostAddress());
		}
		catch(Exception e) {
			System.out.println(e.getMessage());
		}
	}
}
//MainClass.java
package javanet;

public class MainClass {
	public static void main(String[] args) {
		new InetAddressEx();
	}
}

URLConnection 클래스

  • URL 클래스: DNS 클래스를 통한 IP 정보를 이용하여, URL 객체를 만든 후 네트워크 접속 및 URL 정보를 얻어 온다. (www.naver.com 으로 접속을 할때 DNS 서버를 통해서 도메인과 ip 를 매핑한다.)

  • URLConnection 클래스: 추상클래스로, URL 객체로부터 생성된다. URL 클래스의 openConnection() 메소드를 사용한다.

//URLConEx
package javanet;

import java.io.BufferedReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Scanner;

public class URLConEx {

	public URLConEx() {
		String code = null;
		System.out.println("URL: ");
		Scanner sc = new Scanner(System.in);
		String address = sc.next();

		try {
			URL url = new URL(address);
			URLConnection con = url.openConnection();
			BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream()));
			FileWriter fw = new FileWriter("C:\\Users\\다래\\Desktop\\file.html", false);

			while ((code = webData.readLine()) != null) {
				fw.write(code);
			}
			System.out.println("Finished");

			fw.close();
			webData.close();
		} catch(Exception e) {
			e.printStackTrace();
		}

	}

}

//MainClass.java
package javanet;

public class MainClass {

	public static void main(String[] args) {

		new URLConEx();
	}

}

Socket 의 이해

네트워크 상에서 서로 다른 호스트 사이의 통신을 위한 수단

server socket - (I/O stream) - client socket

1) Server 에서 ServerSocket 을 만들고, 클라이언트의 요청을 기다림 2) Client 에서 Socket 을 만들고, I/O Stream 을 만들어 Server 로 요청을 함 3) Server 에서 Client 의 요청을 받아 Socket 을 만들고, I/O Stream 을 만듦. 4) 통신 5) Socket 닫엄

package javanet;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class MakeServerSocket {

	ServerSocket serverSocket = null;
	Socket socket = null;
	PrintWriter writer = null;
	BufferedReader reader = null;
	String lineStr;

	public MakeServerSocket() {
		try {
			serverSocket = new ServerSocket(2000);
			while(true) {
				socket = serverSocket.accept();
				System.out.println("---Client Request---");

				writer = new PrintWriter(socket.getOutputStream(), true);
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

				while((lineStr = reader.readLine()) != null) {
					writer.write(lineStr);
					System.out.println("Input: "+lineStr);
				}

				writer.close();
				reader.close();
				socket.close();
			}
		} catch(Exception e) {

		}
	}

	public static void main(String[] args) {
		new MakeServerSocket();
	}
}

서버는 기다리는 소켓 하나, 클라이언트가 왔을 때 응답하는 소켓 하나, 총 두 개의 소켓이 필요하다.

서버 소켓에 포트번호를 설정하는데, 정보가 아이피로 들어올 때 접속하는 포트 번호이다.

그냥 소켓은 클라이언트와 통신을 할 소켓이다. 이는 serverSocket.accept() 를 사용하는데, 클라이언트로부터 통신이 올때 응답을 한다.

reader 는 클라이언트로부터 온 정보를 읽는다. 그리고 writer 는 그 정보를 작성한다.

package javanet;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MakeClientSocket {
	Socket socket = null;
	PrintWriter writer = null;
	BufferedReader reader = null;

	public MakeClientSocket() {
		try {
			socket = new Socket("localhost", 2000);
			writer = new PrintWriter(socket.getOutputStream(), true);
			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));

			String str = null;
			BufferedReader sReader = new BufferedReader(new InputStreamReader(System.in));

			while((str = sReader.readLine()) != null) {
				writer.println(str);
				System.out.println("Output: "+str);
			}

			writer.close();
			reader.close();
			sReader.close();
			socket.close();
		} catch(Exception e) {

		}
	}

	public static void main(String[] args) {
		new MakeClientSocket();
	}

}