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