네트워크
LAN (Local Area Network) - 집, 사무실
WAN (Wide Area Network) - 국가와 국가간
PAN (Personal Area Network) - 스마트폰, 핫스팟
MAN (Metropolitan Area Network) - 도시권
프로토콜 - 컴퓨터 네트워크에서 데이터를 송수신하기 위한 규칙(약속)
서버와 클라이언트
IP주소
- 네트워크 상에서 컴퓨터를 식별하는 번호로 네트워크 어댑터(랜카드)마다 할당되어 있음
포트 (Port)
- 같은 컴퓨터 내에서 프로그램을 식별하는 번호로
클라이언트는 서버 연결 요청 시 IP주소와 포트 번호를 알아야 함
- 포트 하나당 하나의 프로그램만 들어올 수 있다
- 포트번호 1 ~ 65535
- 0 ~ 0123 (이미 사용되고 있음, 이용할 수 없는 번호)
소켓 프로그래밍
- 소켓을 이용한 통신 프로그래밍
- 프로세스 간의 통신에 사용되는 양쪽 끝단
ex) 클라이언트와 서버가 서로의 ip와 port를 알고 있다
Client <---------------------> server
ㄴ socket ㄴ socket
TCP/IP
- 4계층 모델
- 응용 계층 - HTTP,FTP(웹 브라우저, 파일 전송)
- 전송 계층 - TCP, UDP (재전송, 패킷전송)
- 인터넷 계층 - IP
- 네트워크 접근 계층 - Ethernet (LAN 카드)
프로토콜 (Protocol)
- 컴퓨터 간의 정보를 주고 받을 때의 통신방법에 대한 규약으로
접속, 전달방식, 데이터의 형식, 검증 방법 등을 맞추기 위한 약속
ex) 은행, 주민센터 등의 서류 양식
TCP (Transmission Control Protocol)
- 데이터의 전달의 신뢰성을 최대한 보장하기 위한 방식으로 연결지향형 통신이다.
- 순차적으로 데이터를 전송하고 확인 및 오류 시 재전송을 한다.
UDP (User Datagram Protocol)
- 데이터의 빠른 전달을 보장하기위한 방식으로 비연결 지향형 통신이다.
- 확인 및 재전송 작업이 없다.
- TCP에 비해 안정성은 떨어지지만 더 빠르고 간결함.
- 게임, 실시간 스트리밍 서비스
TCP 소켓 프로그래밍
- 클라이언트와 서버간의 1:1 소켓 통신
- 서버가 먼저 실행 되어 클라이언트의 요청을 기다려야 하고
서버용 프로그램과 클라이언트용 프로그램을 따로 구현해야 함
- 자바에서는 TCP 소켓 프로그래밍을 위해 java.net패키지에서 ServerSocket과 Socket클래스 제공

서버용 TCP 소켓 프로그래밍 순서
- 서버의 포트번호 정함
- 서버용 소켓 객체 생성
- 클라이언트 쪽에서 접속 요청이 오길 기다림
- 접속 요청이 오면 요청 수락 후 해당 클라이언트에 대한 소켓 객체 생성
- 연결된 클라이언트와 입출력 스트림 생성
- 보조 스트림을 통해 성능 개선
- 스트림을 통해 읽고 쓰기
- 통신 종료
클라이언트용 TCP 소켓 프로그래밍 순서
- 서버의 IP주소와 서버가 정한 포트번호를 매개변수로 하여 클라이언트용 소켓 객체 생성
- 서버와의 입출력 스트림 오픈
- 보조 스트림을 통해 성능 개선
- 스트림을 통해 읽고 쓰기
- 통신 종료
UDP 소켓 프로그래밍
- UDP는 연결 지향적이지 않기 때문에 연결 요청을 받아줄 서버 소켓이 필요 없음
- java.net패키지에서 제공하는 두 개의 DatagramSocket간에
DatagramPacket으로 변환된 데이터 주고 받음

서버용 UDP 소켓 프로그래밍 순서
- 서버의 포트번호 정함
- DatagramSocket 객체
- 연결한 클라이언트 IP주소를 가진 InetAddress 객체 생성
- 전송할 메시지를 byte[]로 바꿈
- 전송할 메시지를 DatagramPacket 객체에 담음
- 소켓 레퍼런스를 사용하여 메시지 전송
- 소켓 닫음
클라이언트용 UDP 소켓 프로그래밍 순서
- 서버가 보낸 메시지를 받을 byte[] 준비
- DatagramSocket 객체 생성
- 메시지 받을 DatagramPacket객체 준비
- byte[]로 받은 메시지를 String으로 바꾸어 출력
- 소켓 닫음