java 네트워크
JAVA는 다른 언어에 비해 네트워크 기능이 뛰어난 언어 입니다.
고수준의 언어답게 네트워크 안에서 이루어 지는 깊은 지식에 대해서 개발자는 모두 알 필요가 없습니다. 즉, 많은 클래스가 제공되고, 우리는 단지 유용한 클래스들을 사용하기만 하면 됩니다.
java.net 패키지의 몇 가지 클래스들에 대해서 살펴보도록 합니다.
InetAddress
호스트의 IP주소를 비롯한 네트워크상의 정보를 얻어오는 클래스 입니다. (31_2_ex1_networkex)
package com.javalec.networkex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
public class InetAdressEx {
public InetAdressEx() {
System.out.println("Host 이름을 입력 하세요.");
BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in)); 입력받을 수 있는 스트림 객체 생성
try {
InetAddress inetAddress = InetAddress.getByName(scanner.readLine()); getbyname에 의해 inetaddress객체 생성
System.out.println("Computer NAME : " + inetAddress.getHostName()); 호스트네임 출력
System.out.println("Computer IP : " + inetAddress.getHostAddress()); 호스트주소ip 출력
} catch (Exception e) {
System.out.println(e.getMessage());
e. getMassage() : 에러 이벤트와 함께 들어오는 메세지 출력
e. toString() : 에러 이벤트의 toString()을 호출해서 간단히 에러메세지를 낸다.
e.printstackTrac() : 에러메세지의 발생 근원지를 찾아 단계 별로 에러 메세지 출력
}
}
}
실행결과
Host 이름을 입력 하세요.
www.naver.com
Computer NAME : www.naver.com
Computer IP : 202.179.177.21
URLConnection
URL 클래스 : DNS를 통한 IP정보를 이용하여 URL객체를 만들 후 네트워크 접속 및 URL정보를 얻어온다.
URLConnection클래스 : url 객체로부터 생성되며 url클래스의 oppenConnextion()메소드를 이용
package com.javalec.ex;
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("웹 주소를 입력 하세요.");
Scanner scanner = new Scanner(System.in);
String address = scanner.next();
try {
URL url = new URL(address); Url클래스 생성(네트워크 접속및 url정보를 가져온다)
URLConnection con = url.openConnection(); url객체를 통해 통신을 연결한다.
BufferedReader webData = new BufferedReader(new InputStreamReader(con.getInputStream()));
FileWriter fw = new FileWriter("C:\\Users\\longdi\\Documents\\신입SW인력을 위한 실전 자바 동영상과정_예제_31강\\file.html", false);
while ((code = webData.readLine()) != null) {
fw.write(code);
}
System.out.println("The End"); The End출력
fw.close();
webData.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
URL클래스 객체생성----> URLconnection객체생성 ----->데이터(문자열)를 읽을 수 있도록 함 -----> 파일 기록 클래스 생성...
실제로 html이라는 파일이 만들어진다.
실행결과
웹 주소를 입력 하세요.
http://google.com
The End
Socket
네트워크 상에서 서로 다른 호스트 사이의 통신을 위한 수단
서버
package com.javalec.ex;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MakeServerSocket {
서버는 소켓을 2개만들어야함
ServerSocket serverSocket = null;
Socket socket = null;
PrintWriter writer = null;
BufferedReader reader = null;
String lineStr;
public MakeServerSocket() {
try {
serverSocket = new ServerSocket(2000); 2000포트 사용
while (true) {
socket = serverSocket.accept();
System.out.println("Client 요청");
입출력 스트림 객체 생성
writer = new PrintWriter(socket.getOutputStream(), true);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
while ((lineStr = reader.readLine()) != null) { 문자열 읽어들인것을 lineStr로 저장.
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();
}
}
클라이언트
package com.javalec.ex;
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();
}
}