1. 네트워킹(Networking)
클라이언트/서버(client/server)
- 컴퓨터간의 관계를 역할(role)로 구분하는 개념
- 서비스를 제공하는 쪽이 서버, 제공받는 쪽이 클라이언트가 된다.
- 제공하는 서비스의 종류에 따라 메일서버(email server), 파일서버(file
server), 웹서버(web server) 등이 있다.
- 전용서버를 두는 것을 ‘서버기반 모델’, 전용서버없이 각 클라이언트가
서버역할까지 동시에 수행하는 것을 ‘P2P 모델’이라고 한다.
IP주소(IP address)
- 컴퓨터(host, 호스트)를 구별하는데 사용되는 고유한 주소값
- 4 byte의 정수로 ‘a.b.c.d’와 같은 형식으로 표현.(a,b,c,d는 0~255의 정수)
- IP주소는 네트워크주소와 호스트주소로 구성되어 있다.
- 네트워크주소가 같은 두 호스트는 같은 네트워크에 존재한다.
- IP주소와 서브넷마스크를 ‘&’연산하면 네트워크주소를 얻는다.
InetAddress
- IP주소를 다루기 위한 클래스
2. 소켓 프로그래밍
TCP와 UDP
- 소켓(socket)이란, 프로세스간의 통신에 사용되는 양쪽 끝단(end point)
- 전화할 때 양쪽에 전화기가 필요한 것처럼, 프로세스간의 통신에서도
양쪽에 소켓이 필요하다.
▶ 소켓 프로그래밍이란?
▶ TCP와 UDP
- TCP/IP프로토콜에 포함된 프로토콜. OSI 7계층의 전송계층에 해당
TCP소켓 프로그래밍
- 클라이언트와 서버간의 1:1 소켓 통신.
- 서버가 먼저 실행되어 클라이언트의 연결요청을 기다리고 있어야 한다.
-
서버는 서버소켓을 사용해서 서버의 특정포트에서 클라이언트의 연결요청을 처리할 준비를 한다.
-
클라이언트는 접속할 서버의 IP주소와 포트정보로 소켓을 생성해서 서버에 연결을 요청한다.
-
서버소켓은 클라이언트의 연결요청을 받으면 서버에 새로운 소켓을 생성해서 클라이언트의 소켓과
연결되도록 한다.
-
이제 클라이언트의 소켓과 새로 생성된 서버의 소켓은 서버소켓과 관계없이 1:1통신을 한다.
TCP소켓 프로그래밍 - 예제
- 서버프로그램을 실행한다.
java.exe TcpIpServer
- 서버소켓을 생성한다.
>
serverSocket = new ServerSocket(7777); // TcpIpServer.java
- 서버소켓이 클라이언트 프로그램의 연결요청을 처리할 수 있도록 대기상태로 만든다. 클라이언트 프로그램의 연결요청이 오면 새로운 소켓을 생성해서 클라이언트 프로그램의 소켓과 연결한다.
Socket socket = serverSocket.accept(); // TcpIpServer.java
- 클라이언트 프로그램(TcpIpClient.java)에서 소켓을 생성하여 서버소켓에 연결을 요청한다.
Socket socket = new Socket(“192.168.10.100”,7777); // TcpIpClient.java
- 서버소켓은 클라이언트 프로그램의 연결요청을 받아 새로운 소켓을 생성하여 클라이언트의 소켓과 연결한다.
Socket socket = serverSocket.accept(); // TcpIpServer.java
- 새로 생성된 서버의 소켓(서버소켓 아님)은 클라이언트의 소켓과 통신한다.
UDP소켓 프로그래밍
-
TCP소켓 프로그래밍에서는 Socket과 ServerSocket을 사용하지만,
UDP소켓 프로그래밍에서는 DatagramSocket과 DatagramPacket을 사용.
-
UDP는 연결지향적이지 않으므로 연결요청을 받아줄 서버소켓이 필요없다.
-
DatagramSocket간에 데이터(DatagramPacket)를 주고 받는다