JAVA/포스팅

자바 TCP소켓 프로그래밍

짜집퍼박사(짜박) 2023. 11. 27. 14:39

TCP(Transmission Control Protocol)는 신뢰성 있는 연결을 제공하는 프로토콜로, 자바에서 TCP 소켓 프로그래밍은 java.net 패키지의 Socket 및 ServerSocket 클래스를 사용하여 구현됩니다. 아래는 간단한 TCP 소켓 프로그래밍 예제와 각 구성 요소에 대한 설명입니다.

 

TCP 클라이언트 예제

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;

public class TCPClient {
    public static void main(String[] args) {
        try {
            // 서버에 연결
            Socket socket = new Socket("localhost", 8080);

            // 출력 스트림 획득
            OutputStream outputStream = socket.getOutputStream();

            // 데이터 전송
            String message = "Hello, Server!";
            outputStream.write(message.getBytes());
            outputStream.flush();

            // 입력 스트림 획득
            InputStream inputStream = socket.getInputStream();

            // 서버로부터 데이터 수신
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String receivedData = new String(buffer, 0, bytesRead);
            System.out.println("서버로부터 받은 데이터: " + receivedData);

            // 자원 해제
            inputStream.close();
            outputStream.close();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

TCP 서버 예제

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class TCPServer {
    public static void main(String[] args) {
        try {
            // 서버 소켓 생성 및 대기
            ServerSocket serverSocket = new ServerSocket(8080);
            System.out.println("서버 대기 중...");

            // 클라이언트 연결 대기
            Socket clientSocket = serverSocket.accept();
            System.out.println("클라이언트가 연결되었습니다.");

            // 입력 스트림 획득
            InputStream inputStream = clientSocket.getInputStream();

            // 데이터 수신
            byte[] buffer = new byte[1024];
            int bytesRead = inputStream.read(buffer);
            String receivedData = new String(buffer, 0, bytesRead);
            System.out.println("클라이언트로부터 받은 데이터: " + receivedData);

            // 출력 스트림 획득
            OutputStream outputStream = clientSocket.getOutputStream();

            // 데이터 송신
            String message = "Hello, Client!";
            outputStream.write(message.getBytes());
            outputStream.flush();

            // 자원 해제
            inputStream.close();
            outputStream.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

설명

 

1. 클라이언트 코드

- Socket 클래스를 사용하여 서버에 연결합니다.
- OutputStream을 통해 서버로 데이터를 전송합니다.
- InputStream을 통해 서버로부터 데이터를 수신합니다.

 

2. 서버 코드

- ServerSocket 클래스를 사용하여 클라이언트의 연결을 대기합니다.
- Socket 클래스를 사용하여 클라이언트와의 연결을 허용합니다.
- InputStream을 통해 클라이언트로부터 데이터를 수신합니다.
- OutputStream을 통해 클라이언트에게 데이터를 전송합니다.

 

3. 자원 해제

- 통신이 끝난 후에는 사용한 소켓 및 스트림을 닫아 자원을 해제합니다.

 

이 예제에서는 간단한 메시지를 주고받는 간단한 통신을 보여주고 있습니다. 실제 애플리케이션에서는 프로토콜을 정의하고, 데이터를 적절히 처리하는 로직을 추가해야 합니다.

 

With ChatGPT

'JAVA > 포스팅' 카테고리의 다른 글

자바 UDP소켓 프로그래밍  (0) 2023.11.27
자바 소켓 프로그래밍  (0) 2023.11.27
자바 URLConnection  (0) 2023.11.27
자바 URL(Uniform Resource Location)  (0) 2023.11.27
자바 InetAddress  (0) 2023.11.27