01 Network 첫시간...

프로그래밍/Java 2007. 11. 27. 13:44 Posted by galad

★ 네트워크 용어

① IP
Internet protocol (인터넷 : 전 세계적 TCP/IP프로토콜)
다양한 기기들간의 통신을 지원
② IP 주소
인터넷에서 하나 이상의 웹사이트에 보유된 서버에 부여된 유일한 주소
x.x.x.x 의 형태(여기서 x는 1 바이트 총 4바이트로 구성)
192.108.0.106 의 형태
③ TCP
Transfer Control Protocol
IP의 상위에 존재하는 접속기반의 전송 프로토콜
전송된 모든 데이터들이 순서대로 목적지에 도착하도록 보장

★ TCP/IP(Transmission Control Protocol / Internet Protocol)
프로토콜 : 네트웍으로 연동되기 위해 상호 연동방법을 정의한 규약
인터넷의 표준 프로토콜
4개의 기능 계층으로 구성 : 대부분의 통신 응응 프로그램들은 응용 계층에서 사용

★ TCP와 UDP
전달계층은 크게 TCP와 UDP로 구분된다
패킷(packet) 단위로 전송
① TCP
연결성 통신 방식(전화)
신뢰성 보장
TELNET, HTTP, FTP 등
② UDP
비연결성 통신 방식(편지)
모든 패킷이 목적지의 주소를 가진다
신뢰성이 낮다
TCP 보다 네트웍 부하가 덜하다
PING 등


★ 소켓(socket)
컴퓨터가 연결된 컴퓨터의 끝점(전기의 소켓과 유사한 개념)
정보 송신 : 소켓에 보낼 정보를 Write
정보 수신 : 소켓으로부터 정보를 Read
TCP/IP 소켓
TCP 소켓
UDP 소켓


★ 포트(port)
하나의 컴퓨터에서 다수개의 네트웍 관련 프로그램을 서로 다른 포트를 사용하여 동시에 실행시킬 수 있다(실제 네트웍 라인은 하나)
논리적인 개념
포트 번호로 16비트 사용
예 : 203.233.51.44:8088


★ 자바 : 네트워크를 손쉽게 연결하는 도구, 네트워크 그 자체
통신을 구현하는 까다로운 부분이 이미 구현되어 있음
필요한 부분을 호출하여 통신 프로그램 개발

자바 네트워크의 구성
스트림기반 I/O 클래스 + java.net패키지 클래스

 
 
★ InetAddress 클래스
IP주소를 표현하고 제어하는 기능을 제공하는 클래스
Host Name자체를 가지고 주소를 표현해 그에 관련된 기능을 제공
인스턴스 생성법
생성자 메서드가 없다
다음의 static메서드를 사용하여 인스턴스를 생성한다.
public static InetAddress getByName(String host) throws UnknownHostException
(호스트의 이름(www.jabook.org) 또는 주소(192.108.0.106 )로 InetAddress객체 반환)
public static InetAddress getLocalHost() throws UnknownHostException
(로컬 컴퓨터에 대한 InetAddress객체 반환.  방화벽으로 가려진경우 127.0.0.1)
public static InetAddress[] getAllByName(String host) throws UnknownException
(호스트에 대한 모든 IP주소를  InetAddress객체 배열로 반환)

 


/******************************************************************************
*   파일      : INetAddressTest.java
*   용도      : INetAddress class test
*   작성자   : 성홍제
*   작성일   : 2006. 08. 04
*   Version : 1.0
******************************************************************************/

import java.net.*;
import java.io.*;

public class INetAddressTest
{

    /**
     * @param args
     */
    public static void main(String[] args)
    {
        // TODO Auto-generated method stub
        InetAddress myIp = null;
        InetAddress[] myIp2 = null;
        System.out.println("IP를 알고 싶은 사이트 주소를 입력해 주세요");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
       
        String strAddress = null;
       
        try
        {
            while(!(strAddress = br.readLine()).equals("stop"))
            {
                try
                {
                    //myIp = InetAddress.getByName(strAddress);
                    myIp2 = InetAddress.getAllByName(strAddress);
               
                    //System.out.println("호스트 이름: " + myIp.getHostName());
                    //System.out.println("호스트 주소: " + myIp.getHostAddress());
                    //System.out.println("toStrinjg(): " + myIp.toString());
                    //System.out.println("로컬 호스트: " + myIp.getLocalHost());
   
                    System.out.println("호스트 이름: " + myIp2[0].getHostName());
                   
                    for(int i = 0; i < myIp2.length; i++)
                    {
                        System.out.println("호스트 주소: " + myIp2[i].getHostAddress());
                        System.out.println("toString(): " + myIp2[i].toString());
                        System.out.println("로컬 호스트: " + myIp2[i].getLocalHost());
                    }
                }
                catch(UnknownHostException e)
                {
                    System.out.println("잘못된 주소입니다. 다시 입력해주세요");
                }
            }
        }
        catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try
            {
                br.close();
            }
            catch (IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

    }

}


★ URL 클래스

URL(Uniform Resource Locator) : 인터넷상의 자원에 대한 고유한 주소


protocol://hostname[:port]/path/filename#section 의 형태

ex)  http://www.jabook.org:8080/web/test.html#test1


프로토콜(protocol) : 자원에 접근하기 위해 사용되는 프로토콜
호스트 이름(HostName) : 접근하고자 하는 자원이 있는 위치
포트(Port) : TCP 연결에 대한 포트 번호. 생략시 기본포트번호 사용
 (Echo:7 DayTime:13 FTP:21 Telnet:23 SMPT:25 HTTP:80)
경로명(Path) : 접근하려는 파일이 있는 위치
파일명(File) : 접근하려는 파일


웹상의 주소(URL) 그 자체를 나타내는 클래스
웹상에 존재하는 자원에 접근하거나 유일한 주소를 나타내기 위해 사용됨
InetAddress클래스보다 확장된 개념 : 네트웍 연결까지 가능


URL클래스 객체 생성
  URL url = new URL(protocol:resource);

  URL url = new URL(String protocol, String host, String file);


주요 멤버메서드
public String getFile() : URL파일명 리턴
public String getHost() : URL의 호스트명 리턴
public int getPort() : URL포트번호 리턴
public Strimg getProtocol (): URL의 프로토콜 리턴


★ URL클래스로 페이지를 다운받아 확인하기 위한 절차
① URL객체 생성
 URL home = new URL(“http://www.jabook.org:80/index.html”);
② URL객체로의 스트림 열기
InputStream in = url.openStream();
③ 받는 스트림을 버퍼에 저정
BufferedReader br = new BufferedReader( new InputStreamReader(in));
④ 버퍼를 화면에 출력하고 스트림 닫기
BufferedReader br;
URL home = new URL(“http://www.jabook.org:80/index.html”);
br = new BufferedReader(new InputStreamReader(home.openStream()));
while ((line = br.readLine()) != null)

{
    System.out.println(line);
}
br.close();



/******************************************************************************
*   파일      : URLTest.java
*   용도      : URLTest
*   작성자   : 성홍제
*   작성일   : 2006. 08. 04
*   Version : 1.0
******************************************************************************/

import java.net.*;
import java.io.*;

public class URLTest
{
    public static void main(String args[])
    {
        try
        {
            // URL 클래스를 이용하여 웹에 접속
            System.out.println("저장하고 싶은 웹페이지를 입력하세요.");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
           
            // 주소 입력 시, 페이지 파일명 - index.html이라든지 - 까지 입력해주어야 한다.
            String strUrl = br.readLine();
            URL home  = new URL("http://" + strUrl);
           
            // 접속한 웹으로부터 입력 스트림을 생성한다.
            PrintWriter pw = null;
            String line = null;
           
            System.out.println("Port: "+home.getPort());
            System.out.println("Protocol: "+home.getProtocol());
            System.out.println("HostName: "+home.getHost());
            System.out.println("FileName: "+home.getPath());
            System.out.println("File: "+home.getFile());
            System.out.println("Ref: "+home.getRef());
           
            // URL과의 스트림 생성
            br = new BufferedReader(new InputStreamReader(home.openStream()));
           
            // getFile() 하면 파일명 앞에 '/'가 하나 붙으므로 그걸 제거한다.
            String fileName = "d:\\" + home.getFile().substring(1, home.getFile().length());
            pw = new PrintWriter(new FileWriter(fileName));
           
            while ((line = br.readLine()) != null)
            {
                //System.out.println(line);
                pw.println(line);
            }
           
            System.out.println("웹페이지를 "+fileName+"에 모두 저장하였습니다.");
           
            br.close();
            pw.close();
           
        }
        catch (Exception e)
        {
            //System.out.println("Exception: " + e);
            e.printStackTrace();
        }
    }
}

'프로그래밍 > Java' 카테고리의 다른 글

03 졸려....  (0) 2007.11.27
02 2일째....  (0) 2007.11.27
05 문자 단위 입출력  (0) 2007.11.27
04 ObjectOutputStream / ObjectInputStream 클래스  (0) 2007.11.27
05 3일째...  (0) 2007.11.27