[자바(Java)] Socket Programming
1. Socket Programming
1. 용어 설명
- TCP 프로그램 : ServerSocket 클래스와 Socket 클래스를 이용하여 작성
=> 서버와 클라이언트가 소켓을 사용하여 1:1로 연결되어 데이터를 송수신하는 네트워크 프로그램
- UDP 프로그램 : DatagramSocket 클래스와 DatagramPacket 클래스를 이용하여 작성
=> 값을 전달하는 컴퓨터와 값을 전달받는 컴퓨터로 구분하여 처리
- 서버 (Server) : 외부의 컴퓨터(클라이언트)가 접속할 수 있는 환경과 서비스를 제공하기 위한 컴퓨터
=> ServerSocket 클래스를 사용하여 서버 프로그램 작성
- 클라이언트 (Client) : 서버에 접속하여 서비스를 제공받을 수 있는 컴퓨터
=> Socket 클래스를 사용하여 클라이언트 프로그램 작성
- NTP (Network Time Protocol) Server : 날짜와 시간을 제공하는 서버 컴퓨터
2. TCP 프로그램
1. ServerSocket 클래스
- ServerSocket 클래스 : 서버 프로그램을 작성하기 위해 사용하는 클래스
- ServerSocket 클래스의 ServerSocket(int port) 생성자를 이용하여 매개변수로 전달받은 포트번호를 활성화하여 ServerSocket 객체 생성
=> new ServerSocket(2000);
- ServerSocket 객체를 생성하여 클라이언트가 접속할 수 있는 환경 제공
- 매개변수로 전달받은 포트번호를 이미 다른 네트워크 프로그램에 사용중인 경우 IOException 발생
2. ServerSocket 클래스의 메소드
- ServerSocket.toString() : ServerSocket 객체에 저장된 접속 관련 정보를 문자열로 반환하는 메소드
- ServerSocket.accept() : 클라이언트가 접속되면 클라이언트와 값을 주고 받을 수 있는 Socket 객체를 반환하는 메소드
=> 클라이언트가 접속되기 전까지 스레드가 일시 중지되며 클라이언트가 접속되면 클라이언트의 소켓과 연결될 소켓을 생성하여 반환하고 스레드 재실행
- ServerSocket.close() : ServerSocket 객체를 제거하는 메소드
=> 클라이언트가 접속할 수 있는 환경 소멸
- Socket.getOutputStream() : Socket 객체의 출력스트림(OutputStream 객체)을 반환하는 메소드
3. Socket 클래스
- Socket 클래스 : TCP 프로그램에서 다른 컴퓨터와의 연결을 위한 정보를 저장하기 위한 클래스
=> 다른 컴퓨터의 소켓과 연결되어 값을 송수신할 수 있는 입출력 스트림 제공
- Socket 클래스의 Socket(String host, int port) 생성자를 이용하여 매개변수에 접속 컴퓨터(서버)의 네트워크 식별자(호스트이름 또는 IP 주소)와 활성화된 포트번호를 전달하여 Socket 객체 생성
- UnknownHostException 및 IOException 발생 (일반 예외이므로 반드시 예외 처리)
4. Socket 클래스의 메소드
- Socket.getInputStream() : Socket 객체의 입력스트림(InputStream 객체)을 반환하는 메소드
- Socket.getOutputStream() : Socket 객체의 출력스트림(OutputStream 객체)을 반환하는 메소드
- Socket.close() : Socket 객체를 제거하는 메소드
3. UDP 프로그램
1. DatagramSocket 클래스
- DatagramSocket 클래스 : 다른 컴퓨터와의 연결을 위한 정보를 저장하기 위한 클래스
- DatagramSocket 클래스의 DatagramSocket(int port) 생성자를 사용하여 포트를 활성화 처리하여 DatagramSocket 객체 생성
- DatagramSocket.send(DatagramPacket packet) : 매개변수로 전달받은 DatagramPacket 객체의 패킷정보를 이용하여 데이터(패킷)를 전달하는 메소드
- DatagramSocket.close() : DatagramSocket 객체를 제거하는 메소드
- DatagramSocket.receive(DatagramPacket packet) : 연결 컴퓨터에서 보내온 값을 얻어와 DatagramPacket 객체의 byte 배열에 저장하기 위한 메소드
2. DatagramPacket 클래스
- DatagramPacket 클래스 : 연결 컴퓨터에게 보낼 패킷정보를 저장하기 위한 클래스
- DatagramPacket 클래스의 DatagramPacket(byte[] data, int length, InetAddress address, int port) 생성자를 사용하여 데이터를 보내기 위한 패킷정보가 저장된 DatagramPacket 객체 생성
- DatagramPacket 클래스의 DatagramPacket(byte[] buf, int length) 생성자를 이용하여 데이터를 받기 위해 DatagramPacket 객체 생성