ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • java :: 소켓 socket
    IT/Java & JSP & FW 2012. 3. 23. 20:16
    Socket
    - Java Program은 Socket이라는 개념을 통해서 Network 통신을 한다.
    - Socket은 Network 부분의 끝 부분을 나타내며, 실제 Data가 어떻게 전송되는지 상관하지 않고 읽기/쓰기 Interface를 제공한다.
    - Network 계층과 Transfer 계층이 캡슐화 되어 있기 때문에 두 개의 계층을 신경 쓰지 않고 Program을 만들 수 있다.
    - Socket은 캘리포니아 대학교에서 Bill Joy에 의해 개발되었다.
    - Java는 이식성과 Cross Platform Network Program을 위해서 Socket을 핵심 library로 만들었다.
    - TCP/IP 계층의 TCP를 지원하기 위해서 Socket, ServerSocket class를 제공하고 있다.
    - Client는  Socket Object를 생성하여 TCP Server와 연결을 시도한다.
    - Server는 SocketServer Object를 생성하여 TCP 연결을 청취하여 Client와 Server가 연결된다. 


    Socket Stream



    Socket class
    - 주요 생성자

    - Socket Constructor는 두 가지 예외 처리가 발생한다.
    - 첫 번째는 Host를 찾을 수 없거나, Server의 Port가 열려 있지 않은 경우 UnknownHostException 예외가 발생한다.
    - 두 번째는 Network의 실패, 방화벽 때문에 Server에 접근 할 수 없을 때 IOException 예외가 발생한다.
    - 주요 method



    Socket 종료
    - Socket의 사용이 끝나면 연결을 끊기 위해서는 Socket의 close() method를 호출해야 한다.
    - Socket 종료는 일반적으로 finally Block에서 처리하고, close() 메서는 IOException를 발생하기 때문에 예외처리를 반드시 해야 한다.
    - Socket은 System에 의해 자동으로 종료되는 경우가 있다.
    - Program이 종료되거나, Garbage Collector에 의해 처리되는 경우에 Socket이 자동으로 종료된다.
    - Socket이 System에 의해 자동으로 닫히는 것은 바람직 하지 않고, close() method를 호출해서 정확히 Socket종료를 해야 한다.
    - Socket이 닫히더라도 getIntAddress() , getPort() method는 사용할 수 있으나, getInputStream(), getOutputStream() method는 사용할 수 없다.


    TCP Server Socket
    - ServerSocket class가 TCP Server Socket을 의미한다.
    - Client의 TCP 연결을 받기 위해서는 java.net.ServerSocket class의 Object를 생성해야 한다.
    - ServerSocket class는 Network 통신을 수행하기 위해 자신을 바로 사용하는 것이 아니라 Client의 TCP 요청에 대한 Socket Object를 생성하는 역할을 한다.
    - ServerSocket Object를 생성했다면 ServerSocket class의 accept() method는 Client의 TCP 요청이 있을 때 까지 Blocking 되는 method이다.
    - Client의 TCP 요청이 오면 accept() method는 Client와 통신할 수 있는 TCP Socket을 반환한다.
    - 그런 후에 다른 Client의 요청을 기다리게 되므로 일반적으로 accept() method는 무한 loop로 처리하게 된다.
    - Client의 Socket과 Server에서는 accept() method에 의해 반환 Socket을 가지고 Stream을 생성하여 통신하게  된다.  


    ServerSocket class
    - Server Socket Constructor는 TCP Port number를 parameter로 받는다.
    - 만약, 기존의 TCP Port번호가 사용 중이라면 IOException을 발생하게 된다.
    - 주요 생성자

    - ServerSocket class의 가장 중요한 method는 accept() method이며, accept() method의 시간 설정을 할 수 있는 method,ServerSocket를 종료할 수 있는 method를 제공하고 있다.
    - 주요 method

     

    ServerSocket 연결받기
    - Server Socket의 주요 작업은 들어오는 연결 요청들을 수신하고 각 요청으로 부터 Socket Object를 생성하는 것이다.
    - 이런 역할을 수행하는 것이 ServerSocket class의 accept() method이다.
    - Client에 들어오는 요청이 없다면 요청이 올 때까지 accept() method는 Block화 되거나 타임아웃이 되면 종료된다.

    Socket accept() throws IOException,SecurityException;

    - accpet() method는 일반적으로 무한 loop로 처리한다.
    - Client의 TCP 요청이 오면 accept() method를 통해 Socket Object를 생성한 후에 다른 Client의 TCP 요청을 기다리게 되므로 accept() method를 무한 loop로 처리해야 한다.


    UDP(User Datagram Protocol)
    - UDP는 비 연결 지향이고, IP 위에 매우 얇은 Layer로 구성되어 있다.
    - UDP를 사용하는 Application은 TCP Program에 비해 제어를 할 수 있는 부분이 적다.
    - UDP는 Data를 전송할 때에 Data가 잘 도착했는지 알아낼 방법이 없으며, Data를 보낸 순서대로 도착한다는 보장도 할 수 없다.
    - UDP는 TCP에 비해 훨씬 빠르게 전달된다는 장점이 있다.


    DatagramPacket class
    - UDP Datagram은 java.net.DatagramPacket class로 추상화한 것이다.
    - DatagramPacket class는 Application에서 주고 받을 Data와 관련된 class이고, DatagramSocket class는 실제 Data의 전송을 책임지게 된다.
    - DatagramPacket class는 Data를 송신하기 위한 기능과 수신을 하기 위한 기능으로 분리된다.


    DatagramPacket class의 Constructor
    - DatagramPacket의 Constructor는 Data를 보내기 위한 Constructor와 Data를 받기 위한 Constructor로 구분된다.



    DatagramPacket class의 method
    - IP Header에 출발지 Address와 목적지 Address를 설정하거나 Address를 얻어오는 method, 출발지 Port와 목적지 Port를 설정하거나 얻어오는 다양한 method 제공한다.



    DatagramSocket class
    - TCP Stream Socket과 달리 Server와 Client Datagram Socket 사이에는 차이가 없으며 모든 Datagram Socket은 Datagram을 전송할 뿐만 아니라 수신에서 사용할 수 있다.

     
    DatagramSocket class의 Constructor
    - 모든 DatagramSocket Object는 Data그램을 수신하기 위해서 사용될 수 있기 때문에 local Host 내의 유일한 UDP Port와 연관되어 있다.



    DatagramSocket class의 주요 method
    - DatagramSocket class의 주요 method 기능은 DatagramPacket을 보내거나 받을 수 있는 method를 제공하는 것이다.



    UniCasting관 MultiCasting
    - Client와 Server간의 지속적으로 1 : 1로 통신하는 개념을 UniCasting이라고 한다.
    - 1 : 다의 통신을 MultiCasting이라고 한다.



    UniCasting
    - UniCasting을 구현하기 위해서는 필수 조건이 Server측에 Thread를 생성해서 TCP Socket을 유지해야 한다.



    UniCast Program
    - 유니캐스트 프로그램에 필요한 클래스 구조

     

    MultiCasting
    - UniCast Model은 실시간 Program에서 Server의 정보를 모든 Client가 공유할 때 문제점이 있다.
    - 이런 문제를 해결할 수 있는 방법이 1 : 다 전송을 지원하는 MultiCasting 방법이다.
    - 한명의 Client가 Server의 정보를 변경했을 경우 모든 Client에게 전송함으로써 서로가 변경된 정보를 공유할 수 있는 Application을 만들 때 적합하다.
    - MultiCasting Program을 작성하기 위해서는 UniCast에서 생성된 Thread를 저장하기 위한 공간(ArrayList)이 필요하며, Client에서는 자신이 보낸 Message나 다른 Client가 보낸 Message를 받기 위한 Thread가 필요하다.

     

    MultiCast Program
    - 멀티캐스트 프로그램에 필요한 클래스 구조

Designed by Tistory.