네트워크
: 다른 장치로 데이터를 이동시킬 수 있는 컴퓨터들과 주변 장치들의 집합
: 네트워크에 연결된 모든 장치들을 노드라고 한다.
: 다른 노드에게 하나 이상의 서비스를 해주는 노드를 호스트라 부른다.
: 하나의 컴퓨터에서 다른 컴퓨터로 데이터를 이동시킬 때 복잡한 계층을 통해 전송되는데,
이런 복잡한 레이어의 대표적인 모델이 OSI 계층 모델이다.
: OSI 계층 모델은 모두 7계층으로 이루어졌다.
: 데이터 통신을 이해하는데 OSI 계층 모델은 상당한 역할을 하지만,
인터넷 기반의 표준 모델로 사용하는 TCP/IP 계층 모델을 주로 사용하고 있다.
인터넷 주소(IP)
: 모든 호스트는 인터넷주소(Host 또는 IP 주소)라 불리는 유일한 32비트 숫자로 구성된 주소체계를
이용하여 서로를 구분한다.
포트
: 컴퓨터의 주변자치를 접속하기 위한 물리적 포트
: 프로그램에서 사용되는 접속 장소인 논리적 포트
: 포트번호는 인터넷 번호 할당 허가 위원회(IANA)에 의해 예약된 포트번호를 가진다.
: 포트번호는 0~65535까지이며, 0~1023 시스템에 의해 예약된 포트번호이다.
: 80(HTTP) 21(FTP) 22(SSH) 23(TELNET)
프로토콜
: 프로토콜은 클라이언트와 서버간의 통신 규약이다.
: 통신규약이란 상호 간의 접속이나 절단방식, 통신방식, 주고받을 데이터 형식, 오류검출방식, 코드변환방식,
전송속도 등에 대하여 정의하는 것을 말한다.
TCP와 UDP
: TCP/IP 계층 모델은 4계층의 구조를 가지고 있다.
: 애플리케이션, 전송, 네트워크, 데이터 링크 계층이 있다.
TCP
: Treansmission Control Protocol
: 신뢰할 수 있는 프로토콜
: 데이터를 상대측까지 제대로 전달되었는지 확인 메시지를 주로 받음으로써 데이터의 송수신 상태를 점검한다.
UDP
: User Datagram Protocol
: 신뢰할 수 없는 프로토콜
: 데이터를 보내기만하고 확인 메시지를 주고 받지 않기 때문에 제대로 전달했는지 확인하지 않는다.
InetAddress 클래스
: InetAddress 클래스는 IP주소를 표현한 클래스이다.
: 자바에서는 모든 IP주소를 InetAddress 클래스를 사용한다.
InetAddress 클래스의 생성자
: InetAddress 클래스의 생성자는 하나만 존재하지만, 특이하게 기본 생성자의 접근 제한자가 default이기 때문에
new 연산자 객체를 생성할 수 없다.
: 따라서 InetAddress 클래스는 객체를 생성해 줄 수 있는 5개의 static 메서드를 제공하고 있다.
URL 클래스
: Uniform Resource Locator
: 인터넷에서 접근 가능한 자원의 주소를 표현할 수 있는 형식을 말한다.
URL 클래스의 생성자
: URL클래스는 URL을 추상화하여 만든 클래스이다.
: URL 클래스는 final 클래스로 되어 있기 때문에 상속하여 사용할 수 없다.
: 모든 생성자는 MalformedURLException 예외를 발생한다.
URLConnection 클래스
: 원격 자원에 접근하는 데 필요한 정보를 가지고 있다.
: 필요한 정보란 원격 서버의 헤더 정보, 해당 자원의 길이와 타입 정보, 언어 등을 얻어 올 수 있다.
: URL클래스는 원격 서버 자원의 결과만을 가져오지만,
URLConnection 클래스는 원격 서버 자원의 결과와 원격 서버의 헤더 정보를 가져올 수 있다.
URLConnection 클래스의 생성자
: URLConnection 클래스는 추상 클래스이기 때문에 단독적으로 객체를 생성할 수 없다.
: URL 클래스의 객체를 생성해서 URL클래스의 openConnection() 메서드를 이용해서 객체를 생성해야 한다.
URL url = new URL("http://java.sun.com");
URLConnection urlCon = url.openConnection();
urlCon.connect();
소켓
: 자바 프로그램은 소켓(Socket)이라는 개념을 통해서 네트워크 통신을 한다.
: 소켓은 네트워크 부분의 끝 부분을 나타내며, 실제 데이터가 어떻게 전송되는지 상관하지 않고
읽기/쓰기 인터페이스를 제공한다.
: 네트워크 계층과 전송 계층이 캡슐화 되어 있기 떄문에 두 개의 계층을 신경 쓰지 않고 프로그램을 만들 수 있다.
: 소켓은 캘리포니아 대학교에서 빌 조이(Bill Joy)에 의해 개발되었다.
: 자바는 이식성과 크로스 플랫폼 네트워크 프로그램을 위해서 소켓을 핵심 라이브러리 만들었다.
: TCP/IP 계층의 TCP를 지원하기위해서 Socket, ServerSocket 클래스를 제공하고 있다.
클라이언트는 Socket 객체를 생성하여 TCP 서버와 연결을 시도한다.
서버는 SocketServer객체를 생성하여 TCP 연결을 청취하여 클라이언트와 서버가 연결된다.
: ServerSocket은 클라이언트가 접속했을 때 소켓을 만들어준다. (Thread기반으로 만든다)
Socket 클래스
TCP 소켓은 java.net.Socket 클래스를 의미한다
Socket 클래스 생성자
생성자 | 설명 | |
Socket( InetAddress address, int port ) | InetAddress 객체와 port를 이용해여 Socket 객체를 생성한다. | |
Socket( String host, int port ) | host와 port를 이용하여 Socket 객체를 생성한다. |
: Socket 생성자는 두 가지 예외처리를 발생한다.
: 첫 번째는 호스트를 찾을 수 없거나, 서버의 포트가 열려있지 않은 경우 UnknownHostException 예외가 발생
: 두 번째는 네트워크의 실패, 방화벽 때문에 서버에 접근 할 수 없을 떄 IOException 예외가 발생
소켓을 이용한 입출력 스트림 생성
: TCP소켓은 두 개의 네트워크 사이에 바이트 스트림 통신을 제공한다
: Socket 클래스는 바이트 읽기를 위한 메서드와 쓰기 위한 메서드를 제공한다.
: 두 가지 메서드를 이용하여 클라이언트와 서버간에 통신을 할 수 있다.
java.io.InputStream getInputSteam() throws IOException;
java.io.OutputStream getOutputSteam() throws IOException;
소켓 종료
: 소켓의 사용이 끝나면 연결을 끊기 위해서 소켓의 close() 메서드를 호출해야 한다.
: 소켓 종료는 일반적으로 finally 블록에 처리하고, close() 메서드는 IOEception를 발생한다
: 소켓은 시스템에 의해 자동으로 종료되는 경우가 있다
: 프로그램이 종료되거나, 가비지 컬렉터에 의해 처리되는 경우에 소켓이 자동으로 종료된다
: 소켓이 시스템에 의해 자동으로 닫히는 것은 바람직하지 않고,
close() 메서드를 호출해서 정확히 소켓 종료를 해야한다.
: 소켓이 닫히더라도 getInetAddress(), getPort() 메서드는 사용할 수 있지만, ( static method )
getInputSteam(), getOutputStream() 메서드는 사용할 수 없다. ( instance method )
TCP Server Socket
: ServerSocket 클래스가 TCP 서버 소켓을 의미한다.
: 클라이언트가 TCP 연결을 받기 위해서는 java.net.ServerSocket 클래스의 객체를 생성해야 한다.
: ServerSocket 클래스는 네트워크 통신을 수행하기 위해 자신을 바로 사용하는 것이 아니라
클라이언트의 TCP 요청에 대한 Socket 객체를 생성하는 역할을 한다
: ServerSocket 객체를 생성했다면 ServerSocket 클래스의 accept() 메서드는 클라이언트의 TCP 요청이 있을 때까지
브로킹되는 메서드이다
: 클라이언트의 TCP요청이 오면 accept() 메서드는 클라이언트와 통신할 수 있는 TCP 소켓을 반환한다
: 그런 후에 다른 클라이언트의 요청을 기다리게 되므로 accept는 무한루프
ServerSocket클래스의 생성자
: 서버 소켓 생성자는 TCP 포트번호를 매개변수로 받는다
: 만약, 기존의 TCP 포트번호가 사용중이라면 IOException을 발생하게 된다
ServerSocket 연결받기
: 클라이언트에 들어오는 요청이 없다면 요청이 올 때까지 accept() 메서드는 블록화 되거나 타임아웃이 되면 종료된다
유니 캐스팅
: 클라이언트와 서버간의 지속적으로 일대 일로 통신하는 개념
: 유니 캐스팅을 구현하기 위해서는 필수 조건이 서버측에 스레드를 생성해서 TCP 소켓을 유지해야 한다.
: 문제점 - 실시간 프로그램에서 서버의 정보를 모든 클라이언트가 공유할 때 문제점이 있다.
멀티 캐스팅
: 일대 다의 통신
: 한 명의 클라이언트가 서버의 정보를 변경했을 경우 모든 클라이언트에게 전송함으로써 서로가 변경된 정보를
공유할 수 있는 애플리케이션을 만들 때 적합하다.
: 멀티 캐스팅 프로그램을 작성하기 위해서는 유니캐스트에서 생성된 스레드를 저장하기 위한 공간이 필요하며,
클라이언트에서는 자신이 보낸 메시지나 다른 클라이언트가 보낸 메시지를 받기 위한 스레드가 필요하다.
'Java > java' 카테고리의 다른 글
JavaScript - 회원가입폼 (0) | 2020.08.24 |
---|---|
자바스크립트 (JavaScript) (0) | 2020.08.20 |
스레드 (Thread) (0) | 2020.08.13 |
GUI 프로그래밍 (0) | 2020.08.13 |
예외처리 (Exception) (0) | 2020.08.12 |