hsunny study blog

JAVA 네트워크 프로그래밍 본문

programming

JAVA 네트워크 프로그래밍

헤써니 2016. 5. 10. 02:04

IP Address

- 인터넷에 접속 가능한 컴퓨터들을 구분하기 위해 부여한 숫자 주소이다.

- 0-255 사이의 10진 정수 4개로 구성된다(4바이트).

예) 203.232.11.5


컴퓨터 상호간의 통신을 위해 IP주소와 포트가 필요하다.

TCP/UDP

TCP : Trasmission Control Protocol Port

UDP : User Datagram Protocol Port

0-65535 개의 포트 할당

포트가 하는 역할

IP주소는 통신단말을 식별하는데 사용

포트는 하나의 단말(IP Adress 내) 에서 여러 서비스를 처리하는 경우 각각의 서비스를 구분하기 위해 사용 


TCP는 통신 단말간에 연결을 설정하고 데이터를 교환하는 방식이다.

UDP는 통신 당말간에 연결 설정 없이 데이터를 교환하는 방식이다.

포트는 중복 사용될 수 없으므로 이미 사용중인 포트를 재차 사용하려 할 경우 문제가 발생


포트는 임의로 할당이 가능

- 중복 사용 가능한가요?

포트 0 - 1024는 시스템이 주로 사용하는 영역이므로 임의로 사용하지 않도록 한다.

포트는 중복 사용될 수 없으므로 


HTTP를 통해 웹서버와 통신하겠다

HTTP : 클라이언트/서버 모델을 기반으로 하여 서버측에서 특정 포트를 열어놓고 대기하면 클라이언트에서 접속하여 필요한 자원을 얻어가는 프로토콜

** 자원 : 웹서버에 보관되어 있는 HTML 문법으로 쓰여진 파일 또는 각종 멀티미디어 파일.

이러한 통신 구조는 서버의 IP Address와 포트는 고정되어 있어야 한다는 것을 의미


InetAddress 클래스

IP Address에 대하여 모델링한 클래스이다.

IP Address를 프로그래밍에 사용할 수 있도록 한다.

생성자가 없다

  일반적으로 생성자 대신에 객체를 생성시킬 수 있는 메소드가 제공된다.

static 메소드인 getByName() 에 의해 객체 생성되며 인자로서 호스트명 또는 IP주소를 넘겨 주어야 한다.

반드시 예외 처리를 해주어야 한다. 

  프로그램 실행 중에 접속이 끊어지는 예외 상황이 발생될 수 있으므로

  네트워크 관련 클래스는 예외처리를 필요로 한다.

  try - catch 구문을 이용하여 예외처리를 할 수 있다.

InetAddress 클래스에서 주로 사용되는 메소드

  getHostName() 메소드는 호스트 이름을 반환한다.

  getHostAddress() 메소드는 IP 주소를 문자열로 반환한다.


소켓 개요

소켓이란 ? TCP/IP의 복잡한 프로토콜을 단순화시켜 네트워크 프로그램을 편리하게 작성할 수 있도록 한 API이다.

자바에서 소켓을 이용하려면 java.net 패키지를 import 해야 한다.

소켓 클래스 서버에 접속하기 위한 클라이언트를 구현하는 데 주로 사용된다.


소켓 - 프로그래밍에 사용되는 용어

포트 - 네터워크에 사용되는 용어

포트가 더 큰 개념이 아니라 소켓이 포트보다 큰 개념이라고 하네


서버 소켓

서버측 프로그램은 클라이언트 접속을 대기하다가 요청이 들어오면 새로운 소켓을 발생시켜 클라이언트와 데이터를 주고받을 수 있도록 함

서버측애서 새로 만드는건 대부분 쓰레드로 만들자나어

여러 클라이언트가 동시에 접속요청해도 처리가능한가요? 네 물론 가능합니다.


클라이언트의 역할 SockExam3.java

** 클라이언트용 프로그램으로서 서버측 5000번 포트로 접속한다.

서버의 역할 SockExam1.java

 ** 서버소켓을 사용하여 5000번 포트를 열어놓고 대기하다가 클라이언트의 접속 요청이 있을 시 새로운 소켓 클래스를 생성하는 역할을 한다.

서버 스레드 SockExam2.java

** 서버 프로그램의 일부로서 클라이언트의 접속이 있을 때마다 객체가 생성되며 스레드로 구성되어 있음

  클라이언트에 1대1로 대응하기 위한 클래스로서 스레드로 구현된다.

  즉, 하나의 클라이언트에 대해서 하나의 스레드를 만들게 된다.

  클라이언트와 서버스레드는 1:1로 대응된다.

  



'programming' 카테고리의 다른 글

[프로그래밍]좋은 블로그들  (0) 2016.05.20
JAVA 안드로이드 프로그래밍  (0) 2016.05.10
예외처리, 입출력 스트림  (0) 2016.05.06
애플릿 구조 및 프로그래밍  (0) 2016.05.06
멀티스레드 제어와 메서드  (0) 2016.05.06