본문 바로가기

카테고리 없음

자바를 이용한 TCP 통신을 위한 실전 소켓 프로그래밍 예제

1. TCP 통신 소켓 프로그래밍 개요

TCP (Transmission Control Protocol) 통신은 네트워크 상에서 안정적으로 데이터를 전송하기 위해 사용되는 프로토콜입니다. 소켓 프로그래밍은 TCP 통신을 구현하기 위한 핵심적인 방법입니다.

TCP 소켓 프로그래밍은 클라이언트와 서버 간의 양방향 통신을 가능하게 하는 기술로, 클라이언트가 서버에 접속하여 데이터를 요청하고, 서버는 클라이언트의 요청에 응답하여 데이터를 전송하는 방식으로 작동합니다.

소켓 프로그래밍을 위해 자바에서는 java.net 패키지에 소켓 관련 클래스들을 제공하고 있습니다. Socket 클래스는 클라이언트 소켓을 생성하고, ServerSocket 클래스는 서버 소켓을 생성하는 데 사용됩니다.

소켓 프로그래밍은 네트워크 기반의 다양한 애플리케이션에서 활용됩니다. 예를 들어, 웹 브라우저는 HTTP 프로토콜을 사용하여 서버와 통신하며, 게임 클라이언트는 게임 서버와 TCP 소켓을 통해 데이터를 주고받을 수 있습니다.

이제 다음 장에서는 TCP 클라이언트 소켓 프로그래밍 예제를 살펴보겠습니다.

2. TCP 클라이언트 소켓 프로그래밍 예제

아래는 TCP 클라이언트 소켓 프로그래밍 예제입니다.

import java.io.*;
import java.net.*;

public class TCPClient {

    public static void main(String[] args) {
        String serverIP = "127.0.0.1"; // 서버 IP 주소
        int serverPort = 12345; // 서버 포트 번호

        try {
            // 클라이언트 소켓 생성
            Socket socket = new Socket(serverIP, serverPort);

            // 소켓으로부터 입력 스트림과 출력 스트림 생성
            InputStream input = socket.getInputStream();
            OutputStream output = socket.getOutputStream();

            // 데이터 전송을 위한 버퍼 생성
            byte[] buffer = new byte[1024];

            // 서버로 데이터 전송
            String data = "Hello, Server!";
            output.write(data.getBytes());

            // 서버로부터 데이터 수신
            int bytesRead = input.read(buffer);
            String receivedData = new String(buffer, 0, bytesRead);

            // 수신된 데이터 출력
            System.out.println("서버에서 받은 데이터: " + receivedData);

            // 클라이언트 소켓 종료
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 "127.0.0.1"로 설정된 로컬 호스트의 12345번 포트에 접속하는 클라이언트 소켓을 생성합니다. 입력 스트림과 출력 스트림을 생성하여 데이터를 주고받고, 데이터는 "Hello, Server!"로 설정됩니다.

클라이언트는 write() 메서드를 사용하여 데이터를 서버로 전송하고, read() 메서드를 사용하여 서버로부터 데이터를 수신합니다. 수신된 데이터는 문자열로 변환하여 출력됩니다.

프로그램이 완료되면 클라이언트 소켓은 close() 메서드를 호출하여 종료됩니다.

다음 장에서는 TCP 서버 소켓 프로그래밍 예제를 살펴보겠습니다.

3. TCP 서버 소켓 프로그래밍 예제

아래는 TCP 서버 소켓 프로그래밍 예제입니다.

import java.io.*;
import java.net.*;

public class TCPServer {

    public static void main(String[] args) {
        int serverPort = 12345; // 서버 포트 번호

        try {
            // 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(serverPort);

            // 클라이언트로부터 연결 요청 대기
            Socket clientSocket = serverSocket.accept();

            // 소켓으로부터 입력 스트림과 출력 스트림 생성
            InputStream input = clientSocket.getInputStream();
            OutputStream output = clientSocket.getOutputStream();

            // 데이터 전송을 위한 버퍼 생성
            byte[] buffer = new byte[1024];

            // 클라이언트로부터 데이터 수신
            int bytesRead = input.read(buffer);
            String receivedData = new String(buffer, 0, bytesRead);

            // 수신된 데이터 출력
            System.out.println("클라이언트에서 보낸 데이터: " + receivedData);

            // 서버로 데이터 전송
            String data = "Hello, Client!";
            output.write(data.getBytes());

            // 클라이언트 소켓 종료
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제에서는 12345번 포트로 클라이언트의 연결 요청을 수신하는 서버 소켓을 생성합니다. 입력 스트림과 출력 스트림을 생성하여 클라이언트와 데이터를 주고받고, 수신된 데이터는 "클라이언트에서 보낸 데이터: " 뒤에 붙여서 출력됩니다.

서버는 accept() 메서드를 사용하여 클라이언트의 연결 요청을 대기하고, 연결이 수립되면 클라이언트의 소켓과 통신합니다. 클라이언트로부터 데이터를 수신하고, 수신된 데이터를 출력한 뒤 "Hello, Client!"라는 메시지를 클라이언트로 전송합니다.

프로그램이 완료되면 클라이언트 소켓과 서버 소켓은 close() 메서드를 호출하여 종료됩니다.