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 * ... 생략 */
'Java > Java SE' 카테고리의 다른 글
Java Enumeration, Iterator, ListIterator (0) | 2013.09.02 |
---|---|
Java 소켓 프로그래밍 (11) | 2013.08.30 |
Java 쌍따움표 안에 쌍따움표 처리 (0) | 2013.08.29 |
Java JDBC SWING 프로그래밍 예제 - 성적관리 (9) | 2013.08.24 |
Java 이클립스(Eclipse) JDBC 오라클(ORACLE) 개발 환경 설정 (2) | 2013.08.23 |