1. 네트워킹(Networkind)

- 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크(network)를 구성하는 것.

- 자바에서는 java.net 패키지를 제공해준다.


2. 클라이언트 / 서버(Client / Server)

- 컴퓨터간의 관계를 역할로 구분하는 개념이다.

- 서버는 서비스를 제공하는 컴퓨터, 클라이언트는 서비스를 사용하는 컴퓨터가 된다.

- 서버의 종류는 파일서버(file server), 메일서버(mail server), 어플리케이션서버(application server) 등이 있다.

- 전용서버를 두는 것을 서버기반모델(server-based-model), 전용서버없이 클라이언트가 서버역할을 동시에 수행하는 것을 P2P모델(peer-to-peer) 이라고 한다.

 서버기반 모델(serverd-based model)

 P2P 모델(peer-to-peer-model) 

 - 안정적인 서비스의 제공이 가능하다.

 - 공유 데이터의 관리와 보안이 용이하다.

 - 서버구축비용과 관리비용이 든다. 

 - 서버구축 및 운용비용을 절감할 수 있다.

 - 자원의 활용을 극대화 할 수 있다.

 - 자원의 관리가 어렵다.

 - 보안이 취약하다.


3. IP주소(IP address)

- 컴퓨터(host)를 구별하는데 사용되는 고유한 주소값이다.

- 4byte(32bit) 정수로 구성되고 마침표를 구분자로 'a.b.c.d'와 같은 형식으로 표현된다. (a.b.c.d는 부호없는 1byte값 즉, 0~255의 정수)

- 네트워크주소와 호스트주소로 구성되어 있다.

- 네트워크주소가 같은 두 호스트는 같은 네트워크에 존재한다.

- IP주소와 서브넷마스크를 비트연산자 '&'로 연산하면 IP주소에서 네트워크 주소만을 뽑아낼수 있다.


4. InetAddress

- IP 주소를 다루기 위한 클래스이다.

 반환형

 메서드

 설명 

 byte[] 

 getAddress()  

 IP주소를 byte배열로 반환한다. 

 static InetAddress[] 

 getAllByName(String host)

 도메인명(host)에 지정된 모든 호스트의 IP 주소를 배열에 담아 반환한다. 

 static InetAddress

 getByAddress(byte[] addr) 

 byte 배열을 통해 IP주소를 얻는다. 

 static InetAddress 

 getByName(String host) 

 도메인명(host)을 통해 IP주소를 얻는다. 

 String 

 getCanonicalHostname() 

 fully qualified domain name를 반환한다. 

 String 

 getHostAddress() 

 호스트의 IP주소를 반환한다. 

 String 

 getHostName() 

 호스트의 이름을 반환한다. 

 static InetAddress 

 getLocalHost() 

 지역호스트의 IP주소를 반환한다. 

 boolean 

 isMulticatAddress() 

 IP주소가 멀티캐스트 주소인지 알려준다. 

 boolean 

 isLoopbackAddress() 

 IP주소가 loopback 주소(127.0.0.1)인지 알려준다. 

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;
import java.util.Iterator;

public class InetAddressTest {
	public static void main(String[] args) {
		InetAddress ip = null;
		InetAddress[] ipArr = null;
		
		try {
			ip = InetAddress.getByName("www.naver.com");
			System.out.println("getHostName() : " + ip.getHostName());
			System.out.println("getHostAddress() : " + ip.getHostAddress());
			System.out.println("toString() : " + ip.toString());
			
			byte[] ipAddr = ip.getAddress();
			System.out.println("getHostAddress() : " + Arrays.toString(ipAddr));
			
			String result = "";
			for (int i = 0; i < ipAddr.length; i++) {
				result += (ipAddr[i] < 0) ? ipAddr[i] + 256 : ipAddr[i];
				result += ".";
			} // for
			
			System.out.println("getAddress()+256 : " + result);
			System.out.println();
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} // try - catch
		
		try {
			ip = InetAddress.getLocalHost();
			System.out.println("getHostName() : " + ip.getHostName());
			System.out.println("getHostAddress() : " + ip.getHostAddress());
			System.out.println("toString() : " + ip.toString());
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} // try - catch
		
		try {
			ipArr = InetAddress.getAllByName("www.naver.com");
			
			System.out.println();
			for (int i = 0; i < ipArr.length; i++) {
				System.out.println("ipArr["+i+"] : " + ipArr[i]);
			} // for
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} // try - catch
	} // main
} // InetAddressTest

/*
 * 
 * 결과
 * 
 * getHostName() : www.naver.com
 * getHostAddress() : 202.131.30.12 
 * toString() : www.naver.com/202.131.30.12
 * getHostAddress() : [-54, -125, 30, 12]
 * getAddress()+256 : 202.131.30.12.
 * 
 * getHostName() : Gz
 * getHostAddress() : 192.168.0.37
 * toString() : Gz/192.168.0.37

 * ipArr[0] : www.naver.com/202.131.30.12
 * ipArr[1] : www.naver.com/220.95.233.172
 * 
 */

5. URL(Uniform Resource Location)

- 인터넷에 존재하는 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것이다.

- '프로토콜://호스트명:포트번호/경로명/파일명?쿼리스트링#참조'의 형태로 이루어져있다.

- 프로토콜 : 자원에 접근하기 위해 서버와 통신하는데 사용되는 통신규약

- 호스트명 : 자원을 제공하는 서버의 이름

- 포트번호 : 통신에 사용되는 서버의 포트번호

- 경로명 : 접근하려는 자원이 저장된 서버상의 위치

- 파일명 : 접근하려는 자원의 이름

- 쿼리 : URL에서 '?'이후의 부분

- 참조 : URL에서 '#'이후의 부분

 생성자 

 설명 

 URL(String spec) 

 지정된 문자열 정보의 URL 객체를 생성한다. 

 URL(String protocol, String host, String file)

 지정된 값으로 구성된 URL 객체를 생성한다. 

 URL(String protocol, String host, int port, String file) 

 지정된 값으로 구성된 URL 객체를 생성한다. 


 반환형

 메서드 

 설명 

 String

 getAuthority() 

 호스트명과 포트를 문자열로 반환한다. 

 Object 

 getContent() 

 URL의 Content객체를 반환한다. 

 Object 

 getContent(Class[] classes) 

 URL의 Content객체를 반환한다. 

 int 

 getDefaultPort() 

 URL의 기본 포트를 반환한다. (http는 80) 

 String 

 getFile()

 파일명을 반환한다. 

 String 

 getHost() 

 호스트명을 반환한다. 

 String 

 getPath() 

 경로명을 반환한다. 

 int 

 getPort() 

 포트를 반환한다. 

 String  

 getProtocol() 

 프로토콜을 반환한다. 

 String  

 getQuery() 

 쿼리를 반환한다. 

 String 

 getRef() 

 참조(anchor)를 반환한다. 

 String  

 getUserInfo() 

 사용자정보를 반환한다.

 URLConnection 

 openConnection() 

 URL과 연결된 URLConnection을 얻는다. 

 URLConnection 

 openConnection(Proxy proxy) 

 URL과 연결된 URLConnection을 얻는다. 

 InputStream

 openStream() 

 URL과 연결된 URLConnection의 InputStream을 얻는다. 

 boolean 

 sameFile(URL other) 

 두 URL이 서로 같은 것인지 알려준다. 

 void 

 set(String protocol, String host, int port, String file, String ref) 

 URL 객체의 속성을 지정된 값으로 설정한다.

 void

 set(String protocol, String host, int port, String authority, String userInfo, String path, String query, String ref) 

 URL 객체의 속성을 지정된 값으로 설정한다.

 String

 toExternalForm() 

 URL을 문자열로 변환하여 반환한다. 

 URI 

 toURI() 

 URL을 URI로 변환하여 반환한다. 

import java.net.URL;

public class URLTest {
	public static void main(String[] args) throws Exception {
		URL url = new URL("http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking");
		
		System.out.println("url.getAuthority() : " + url.getAuthority());
		System.out.println("url.getContent() : " + url.getContent());
		System.out.println("url.getDefaultPort() : " + url.getDefaultPort());
		System.out.println("url.getPort() : " + url.getPort());
		System.out.println("url.getFile() : " + url.getFile());
		System.out.println("url.getHost() : " + url.getHost());
		System.out.println("url.getPath() : " + url.getPath());
		System.out.println("url.getProtocol() : " + url.getProtocol());
		System.out.println("url.getQuery() : " + url.getQuery());
		System.out.println("url.getRef() : " + url.getRef());
		System.out.println("url.getUserInfo() : " + url.getUserInfo());
		System.out.println("url.toExternalForm() : " + url.toExternalForm());
		System.out.println("url.toURI() : " + url.toURI());
	} // main
} // URLTest

/*
 *
 * 결과
 * 
 * url.getAuthority() : gangzzang.tistory.com
 * url.getContent() : sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@9444d1
 * url.getDefaultPort() : 80
 * url.getPort() : -1
 * url.getFile() : /entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * url.getHost() : gangzzang.tistory.com
 * url.getPath() : /entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * url.getProtocol() : http
 * url.getQuery() : null
 * url.getRef() : null
 * url.getUserInfo() : null
 * url.toExternalForm() : http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * url.toURI() : http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * 
 */

6. URLConnection

- 어플리케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스로 추상클래스이다.

- HttpURLConnection과 JarURLConnection이 있다.

 반환형

 메서드 

 설명 

 void

 addRequestProperty(String key, String value) 

 지정된 키와 값을 RequestProperty에 추가한다. 기존에 같은 키가 있어도 값을 덮어쓰지 않는다. 

 void

 connect() 

 URL에 지정된 자원에 대한 통신연결을 연다. 

 boolean 

 getAllowUserInteraction() 

 UserInteraction의 허용여부를 반환한다. 

 int 

 getConnectTimeout() 

 연결종료시간을 천분의 일초로 반환한다. 

 Object 

 getContent() 

 content객체를 반환한다. 

 Object 

 getContent(Class[] classes) 

 content 객체를 반환한다. 

 String 

 getContentEncoding() 

 content의 인코딩을 반환한다. 

 int 

 getContentLength() 

 content의 크기를 반환한다. 

 String 

 getContentType() 

 content의 type을 반환한다. 

 long 

 getDate() 

 헤더의 data필드의 값을 반환한다. 

 boolean 

 getDefaultAllowUserInteraction() 

 defaultAllowUserInteraction의 값을 반환한다. 

 String 

 getDefaultRequestProperty(String key) 

 RequestProperty에서 지정된 키의 디폴트 값을 얻는다. 

 boolean 

 getDefaultUseCaches() 

 useCache의 디폴트 값을 얻는다. 

 boolean 

 getDolnput() 

 dolnput 필드값을 얻는다. 

 boolean

 getDoOutput() 

 doOutput 필드값을 얻는다. 

 long

 getExpiration()  

 자원(URL)의 만료일자를 얻는다. (천분의 일초단위) 

 FileNameMap

 getFileNameMap() 

 FileNameMap(mimetable)을 반환한다. 

 String 

 getHeaderField(int n)

 헤더의 n번째 필드를 읽어온다.

 String  

 getHeaderField(String name) 

 헤더에서 지정된 이름의 필드를 읽어온다. 

 long 

 getHeaderFiledDate(String name, long Default) 

 지정된 필드의 값을 날짜값으로 변환하며 반환한다. 필드값이 유효하지 않을 경우 Default값을 반환한다. 

 int

 getHeaderFieldInt(String name, int Default) 

 지정된 필드의 값을 정수값으로 변환하여 반환한다. 필드값이 유효하지 않을 경우 Default값을 반환한다. 

 String  

 getHeaderFieldKey(int n) 

 헤더의 n번째 필드를 읽어온다. 

 Map 

 getHeaderFields() 

 헤더의 모든 필드와 값이 저장된 Map을 반환한다. 

 long

 getIfModifiedSince()

 ifModifiedSince(변경여부) 필드의 값을 반환한다. 

 InputStream 

 getInputStream()

 URLConnetion에서 InputStream을 반환한다. 

 long 

 getLastModified()

 LastModified(최종변경일) 필드의 값을 반환한다.

 OupputStream 

 getOutputStream() 

 URLConnetion에서 OutputStream을 반환한다. 

 Permission 

 getPermission() 

 Permission(허용권한)을 반환한다. 

 int

 getReadTimeout() 

 읽기제한시간의 값을 반환한다. (천분의 일초) 

 Map

 getRequestProperties() 

 RequestProperties에 지정된 (키, 값)을 Map으로 반환한다. 

 String 

 getRequestProperty(String key) 

 RequestProperty에서 지정된 키의 값을 반환한다. 

 URL 

 getURL() 

 URLConnection의 URL을 반환한다. 

 boolean

 getUseCaches() 

 캐쉬의 사용여부를 반환한다.

 String

 guessContentTypeFromName(String fname) 

 지정된 파일(fname)의 content-type을 추측하여 반환한다. 

 String

 guessContentTypeFromStream(InputStream is) 

 지정된 입력스트림(is)의 content-type을 추측하여 반환한다.

 void

 setAllowUserInteraction(boolean allowuserinteraction) 

 UserInteraction의 허용여부를 설정한다.

 void

 setConnectTimeout(int timeout) 

 연결종료시간을 설정한다. 

 void  

 setContentHandlerFactory(ContentHandlerFactory fac) 

 ContentHandlerFactory를 설정한다. 

 void

 setDefaultAllowUserInteraction(boolean Defaultallowuserinteraction) 

 UserInteraction 허용여부의 기본값을 설정한다. 

 void 

 setDefaultRequestProperty(String key, String value) 

 RequestProperty의 기본 키쌍(key-pari)을 설정한다. 

 void 

 setDefaultUseCaches(boolean defaultusecaches) 

 캐쉬 사용여부의 기본값을 설정한다. 

 void 

 setDolnput(boolean doinput) 

 DoInput 필드의 값을 설정한다. 

 void

 setDoOutput(boolean dooutput) 

 DoOutput 필드의 값을 설정한다.

 void 

 setFileNameMap(FileNameMap map) 

 FileNameMap을 설정한다. 

 void 

 setModifiedSince(long ifmodifiedsince) 

 읽기제한시간을 설정한다 (천분의 일초) 

 void 

 setRequestProperty(String key, String value) 

 ReqeustProperty에 (key, value)를 저장한다. 

 void

 setUseCaches(boolean usecaches) 

 캐쉬의 사용여부를 설정한다. 

import java.net.URL;
import java.net.URLConnection;


public class URLConnectionTest {
	public static void main(String[] args) {
		URL url = null;
		String address = "http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking";
		String line = "";
		
		try {
			url = new URL(address);
			URLConnection conn = url.openConnection();
			
			System.out.println("toString() : " + conn);
			System.out.println("getAllowUserInteraction() : " + conn.getAllowUserInteraction());
			System.out.println("getConnectTimeout() : " + conn.getConnectTimeout());
			System.out.println("getContent() : " + conn.getContent());
			System.out.println("getContentEncoding() : " + conn.getContentEncoding());
			System.out.println("getContentType() : " + conn.getContentType());
			System.out.println("getDate() : " + conn.getDate());
			System.out.println("getDefaultAllowUserInteraction() : " + conn.getDefaultAllowUserInteraction());
			System.out.println("getDefaultUseCaches() : " + conn.getDefaultUseCaches());
			System.out.println("getDoInput() : " + conn.getDoInput());
			System.out.println("getDoOutput() : " + conn.getDoOutput());
			System.out.println("getExpiration() : " + conn.getExpiration());
			System.out.println("getHeaderFields() : " + conn.getHeaderFields());
			System.out.println("getIfModifiedSince() : " + conn.getIfModifiedSince());
			System.out.println("getLastModified() : " + conn.getLastModified());
			System.out.println("getReadTimeout() : " + conn.getReadTimeout());
			System.out.println("getURL() : " + conn.getURL());
			System.out.println("getUseCaches() : " + conn.getUseCaches());
		} catch (Exception e) {
			e.printStackTrace();
		}
	} // main
} // URLConnectionTest

/*
 * 
 * 결과
 * 
 * toString() : sun.net.www.protocol.http.HttpURLConnection:http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * getAllowUserInteraction() : false
 * getConnectTimeout() : 0
 * getContent() : sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@77eaf8
 * getContentEncoding() : null
 * getContentType() : text/html; charset=utf-8
 * getDate() : 1377830305000
 * getDefaultAllowUserInteraction() : false
 * getDefaultUseCaches() : true
 * getDoInput() : true
 * getDoOutput() : false
 * getExpiration() : 375007920000
 * getHeaderFields() : {null=[HTTP/1.1 200 OK], Expires=[Thu, 19 Nov 1981 08:52:00 GMT], X-UA-Compatible=[IE=Edge], Set-Cookie=[visited=1377830305; path=/; domain=gangzzang.tistory.com], Connection=[Keep-Alive], Server=[Apache], Pragma=[no-cache], Cache-Control=[no-store, no-cache, must-revalidate, post-check=0, pre-check=0], Date=[Fri, 30 Aug 2013 02:38:25 GMT], Transfer-Encoding=[chunked], Vary=[Accept-Encoding], P3P=[CP='ALL DSP COR MON LAW OUR LEG DEL'], Keep-Alive=[timeout=5, max=85], Content-Type=[text/html; charset=utf-8]}
 * getIfModifiedSince() : 0
 * getLastModified() : 0
 * getReadTimeout() : 0
 * getURL() : http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * getUseCaches() : true
 * 
 */
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class URLConnectionTest {
	public static void main(String[] args) {
		URL url = null;
		BufferedReader input = null;
		String address = "http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking";
		String line = "";

		try {
			url = new URL(address);

			// URLConnection conn = url.openConnection();
			// InputStream in = conn.getInputStream();
			// 위 2줄은 InputStream in = url.openStream(); 과 같다.
			input = new BufferedReader(new InputStreamReader(url.openStream()));

			while ((line = input.readLine()) != null) {
				System.out.println(line);
			} // while
			
			input.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	} // main
} // URLConnectionTest

/*
 * 
 * 결과
 * 
 * url.toURI() : http://gangzzang.tistory.com/entry/Java-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%82%B9Networking
 * ... 생략
 */



+ Recent posts