JAVA
Network
Network란 서로 다른 Computer끼리 서로 연결 되어 있는 망을 의미한다. Network 상에서는 Server와 client가 존재하는데 Server와 Client는 각자의 역할을 수행하기 위해 Ip주소, Port번호, Domain을 알 필요가 있다.
Server 와 Client
Sever는 Client의 요청에 대해 응답하는 역할
Client는 특정 목정을 수행하기 위해 Server에게 요청하는 역할
InetAddress Class
IP 주소를 표현한 클래스로 다음과 같은 주요 메서드를 사용한다.
getLocalhost();
local IP
getByName(String domain);
특정 domain의 Ip
getAllByNames(String host);
domain에 연결된 전체 Ip 얻을 수 있으면 반환 타입은 InetAddress타입의 배열이다.
TCP (Transmission Control Protocol)
TCP는 연결 지향 프로토콜로 데이터를 안전하고 정확하게 전달 하기 위해 반드시 연결을 확인 후 데이터를 전송하는 방식이다. UDP보다 속도가 느리다는 단점이 있다. TCP 연결을 위해서는 Server, Client 모두 소켓이 필요하다.
Socket
ServerScoket : 연결을 수락 해주고 Client로 부터 온 Socket을 얻는다.
Client Scocket : 자신의 정보를 보내 연결을 요청
TCP Sever
- ServerSocket을 생성하여 서버를 연다.
- 요청이 들어올 수 있는 Port 번호를 지정해야한다.
- ServerSocket server = new ServerSocket(int port);
- Client 요청을 대기
- 요청을 한번만 받는 것이 아니라 요청이 처리 된 후 서버는 계속해서 새로운 요청을 받아야 함을 기억해야한다.
- While(true){
/ 요청 수락 및 처리 후 자원 반납 /
}
- Client 요청 수락
- Client에서 Server로 보낸 정보를 Socket에 저장하여 요청을 다룬다.
- Socket client = server.accept();
- Client의 요청에 대한 처리
- Input/Output Stream 이용
- InputStream is = client.getInputStream();
- OutputStream os = client.getOutputStream();
- Client Socket 자원 반납
- 요청에 대한 응답이 완료되면 새로운 요청을 계속 받아야 하므로 자원을 반납해준다.
- client.close();
- 종료
- 일반적으로 Server는 계속 열려있으며 에러나 예외가 발생했을 때 종료하는 것이 일반 적이다.
- server.close();
TCP Client
- Socket을 생성하여 Server에 접속을 요청한다.
- 접속할 Server의 host와 포트 번호를 지정해야 한다.
- Socket client = new Socket(String host, int port);
- 접속하여 요청을 보내고 응답을 확인 한다.
- Input/Output Stream 이용
- InputStream is = client.getInputStream();
- OutputStream os = client.getOutputStream();
- 응답을 확인 후 자원을 반납한다.
- 요청 및 응답에 사용한 자원이 있다면 비우고 반납해야 한다.
- 종료
Echo Server
Client 와 Server 가 접속 했다면 Stream 을 통해 data 를 전송 할 수 있다