본문 바로가기
IT/자바 Java

소켓이 뭐예요? TCP와 UDP로 배우는 자바 소켓 프로그래밍

by SidePower 2024. 11. 27.

 

소켓이란 무엇인가?

소켓은 네트워크 상에서 데이터를 주고받기 위해 만들어진 통로예요.
서버와 클라이언트는 소켓을 통해 서로 연결되고 데이터를 주고받아요.

예를 들면,

우리가 웹 브라우저에서 사이트에 접속할 때도 이 소켓 연결이 사용돼요!

 

TCP와 UDP의 차이점

  1. TCP (Transmission Control Protocol)
    • 데이터의 신뢰성 보장.
    • 손실된 데이터는 재전송하며, 모든 데이터가 순서대로 도착하는 걸 보장해요.
    • 속도는 느리지만 안정적이에요. 예: 웹 브라우징, 이메일.
  2. UDP (User Datagram Protocol)
    • 데이터의 손실에 민감하지 않아요. 재전송을 하지 않으니 빠른 속도가 장점이에요.
    • 예: 스트리밍 서비스, 게임.

서버와 클라이언트 구조 이해하기

  • 서버: 서비스를 제공하는 프로그램(예: 웹 서버).
  • 클라이언트: 서버에 요청을 보내는 프로그램(예: 브라우저).
        서버는 항상 대기하고 있다가 클라이언트가 요청을 보낼 때 응답해요.

■  간단한 예 . TCP 서버와 클라이언트 구현

TCP 서버 코드 (Java)

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

public class TCPServer {
    public static void main(String[] args) {
        try (ServerSocket serverSocket = new ServerSocket(8080)) {
            System.out.println("서버가 시작되었습니다.");

            while (true) {
                Socket clientSocket = serverSocket.accept();
                BufferedReader in = new BufferedReader(
                    new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                String clientMessage = in.readLine();
                System.out.println("클라이언트: " + clientMessage);

                out.println("서버 응답: " + clientMessage.toUpperCase());
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

 

TCP 클라이언트 코드 (Java)

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

public class TCPClient {
    public static void main(String[] args) {
        try (Socket socket = new Socket("localhost", 8080)) {
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(
                new InputStreamReader(socket.getInputStream()));

            out.println("Hello, Server!");
            System.out.println("서버 응답: " + in.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 

소켓 통신의 기본을 쉽게 설명하면서 직접 코딩해볼 수 있도록 설계됐어요.

네트워크 프로그래밍이 처음엔 복잡하게 느껴질 수 있지만,

하나씩 구현해 보면 의외로 재미있고 실용적이라는 걸 느끼게 될 거예요!

반응형

댓글