1. 유용한 클래스
가. InetAddress
•
InetAddress Class: IP주소를 다루기 위한 클래스
→ 호스트 IP주소, 호스트 이름, 로컬IP주소 등등
try {
InetAddress inetAddress = InetAddress.getByName("www.naver.com");
System.out.println(inetAddress.getHostAddress());
}catch (UnknownHostException e){
e.printStackTrace();
}
// 출력결과
// 223.130.195.200
// www.naver.com
Java
복사
나. URL
•
URL Class: URL의 구성요소를 다루기 위한 클래스
•
URL 구성요소
→ 'http://www.naver.com:80/sample/hello.html?referer=code#index1'
→ 프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조
→ 클래스의 구체적인 사용법
https://docs.oracle.com/javase/7/docs/api/java/net/URL.html
다. URLConnection
•
URLConncection: URL과 App 간의 통신연결을 지원하는 클래스로 추상 클래스임
→ HttpURLConnection, JarURLConnection Class가 URLConnection 클래스를 구현함
URL url = null;
BufferedReader input = null;
String address = "https://docs.oracle.com/javase/7/docs/api/java/net/URL.html";
String line = "";
try {
url = new URL(address);
URLConnection connection = url.openConnection();
// 주석처리한 것과 같이 간략화할 수 있음
// input = new BufferedReader(new InputStreamReader(url.openStream()));
InputStream in = connection.getInputStream();
input = new BufferedReader(new InputStreamReader(in));
while((line=input.readLine()) != null){
System.out.println(line);
}
input.close();
} catch (Exception e) {
e.printStackTrace();
}
Java
복사
2. TCP 소켓 프로그래밍
가. 소켓
•
소켓(Socket): 프로세스간의 통신을 담당, InputStream과 OutputStrea을 가지고 있으며 상대의 각각의 Stream과 교차하여 프로세스간 입출력(통신)이 가능해짐
•
서버소켓(ServerSocket): 서버 프로그램에서 클라이언트의 연결 요청을 준비하는 소켓, 하나의 포트에 하나의 서버소켓이 결합됨
나. TCP 소켓 통신 과정
•
서버의 연결 요청 처리 준비) 서버 프로그램에서 서버소켓으로 연결 요청에 대한 처리를 준비함.
→ 서버소켓은 서버의 특정 포트와 결합되어 있음
•
클라이언트의 연결 요청) 클라이언트는 소켓을 생성해서 서버에 연결을 요청함.
→ 클라이언트는 서버의 IP주소와 포트번호를 기반으로 연결 요청
•
서버의 연결 수락) 서버는 클라이언트의 연결 요청을 받아서 서버에 새로운 소켓을 생성함.
•
통신) 서버에서 새롭게 생성한 소켓과 클라이언트의 소켓이 연결되어 1:1 통신을 시작함
// Server side
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(7777);
System.out.println("서버: 연결 준비 완료");
} catch (IOException e){e.printStackTrace();}
while(true){
try {
System.out.println("연결 요청 대기");
Socket socket = serverSocket.accept();
System.out.println(socket.getInetAddress() + "로부터 연결 요청 들어옴");
// 출력 스트림 생성
OutputStream out = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
// client의 socket에 데이터 전송
dos.writeUTF("TEST Message from Server");
System.out.println("데이터 전송 완료");
dos.close();
socket.close();
} catch (IOException e){e.printStackTrace();}
}
Java
복사
// Client Side
try {
String serverIp = "127.0.0.1";
System.out.println("서버에 연결 중");
Socket socket = new Socket(serverIp, 7777);
InputStream in = socket.getInputStream();
DataInputStream dis = new DataInputStream(in);
System.out.println("from server: " + dis.readUTF());
System.out.println("연결 종료");
dis.close();
socket.close();
}catch (Exception e){e.printStackTrace();}
Java
복사
3. UDP 소켓 프로그래밍
Reference
•
남궁성, 자바의 정석 3rd Edition