2 min read

[F-Lab] 모각코 챌린지 N일차 - 소켓 통신과 UDP

소켓 통신이란?

소켓 통신(Socket communication)은 컴퓨터 네트워크 상에서 서로 다른 프로세스 간에 데이터를 주고받는 방법 중 하나입니다. 소켓 통신은 인터넷을 비롯한 많은 컴퓨터 네트워크에서 주로 사용됩니다. 소켓 통신은 TCP/IP 프로토콜을 이용하여 통신을 합니다.

Socket 클래스란?

Socket 클래스는 자바에서 소켓 통신을 구현할 때 사용하는 클래스입니다. Java.net 패키지에 포함되어 있습니다. 소켓 통신에서 서버 측에서는 ServerSocket 클래스를 사용하고, 클라이언트 측에서는 Socket 클래스를 사용합니다.

Socket 클래스의 주요 메서드

  • 생성자: Socket 클래스 객체를 생성합니다.
  • connect(): 서버에 연결합니다.
  • getInputStream(): 입력 스트림을 반환합니다.
  • getOutputStream(): 출력 스트림을 반환합니다.
  • close(): 소켓을 닫습니다.

코드 예시

자바에서 소켓 통신을 구현하려면 서버와 클라이언트 각각에 대한 코드가 필요하다.

  • 서버 측 코드

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

public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket(8080); // 8080 포트에서 대기
} catch (IOException e) {
System.err.println("Could not listen on port: 8080.");
System.exit(1);
}

    Socket clientSocket = null;
    try {
        clientSocket = serverSocket.accept(); // 클라이언트 연결 대기
    } catch (IOException e) {
        System.err.println("Accept failed.");
        System.exit(1);
    }

    PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

    String inputLine;

    while ((inputLine = in.readLine()) != null) {
        System.out.println("클라이언트로부터 받은 메시지: " + inputLine);
        out.println(inputLine); // 클라이언트로 메시지 전송
    }

    out.close();
    in.close();
    clientSocket.close();
    serverSocket.close();
}

}

  • 클라이언트 측 코드

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

public class Client {
public static void main(String[] args) throws IOException {
Socket echoSocket = null;
PrintWriter out = null;
BufferedReader in = null;

    try {
        echoSocket = new Socket("localhost", 8080); // 서버에 연결
        out = new PrintWriter(echoSocket.getOutputStream(), true);
        in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
    } catch (UnknownHostException e) {
        System.err.println("Don't know about host: localhost.");
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O for the connection to: localhost.");
        System.exit(1);
    }

    BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
    String userInput;

    while ((userInput = stdIn.readLine()) != null) {
        out.println(userInput); // 서버로 메시지 전송
        System.out.println("서버로 보낸 메시지: " + userInput);
        System.out.println("서버로부터 받은 메시지: " + in.readLine());
    }

    out.close();
    in.close();
    stdIn.close();
    echoSocket.close();
}

}