소켓 프로그래밍

2024. 7. 2. 22:38Linux*security/Network

반응형

 

 

 

 소켓을 이용한 서버 클라이언트 통신 프로그램의 구조

 

 

소켓 프로그래밍을 이용한 서버-클라이언트 통신 프로그램의 구조는 크게 두 부분으로 나눌 수 있다:

 


서버 프로그램

1. 소켓 생성: 서버는 소켓을 생성하여 클라이언트의 연결 요청을 기다린다.
2. 바인딩: 소켓을 특정 IP 주소와 포트에 바인딩한다.
3. 리스닝: 소켓이 클라이언트의 연결 요청을 듣도록 설정한다.
4. 접속 허용: 클라이언트의 연결 요청을 수락한다.
5. 데이터 송수신: 클라이언트와 데이터를 주고받는다.
6. 연결 종료: 클라이언트와의 연결을 종료한다.

 클라이언트 프로그램

1. 소켓 생성: 클라이언트는 소켓을 생성한다.
2. 연결 요청: 서버의 IP 주소와 포트로 연결 요청을 보낸다.
3. 데이터 송수신: 서버와 데이터를 주고받는다.
4. 연결 종료: 서버와의 연결을 종료한다.

서버프로그램

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

public class Server {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket clientSocket = null;

        try {
            // 서버 소켓 생성 및 포트 12345에 바인딩
            serverSocket = new ServerSocket(12345);
            System.out.println("Server is listening on port 12345...");

            // 클라이언트의 연결 요청을 수락
            clientSocket = serverSocket.accept();
            System.out.println("Connection from " + clientSocket.getInetAddress() + " has been established!");

            // 클라이언트와 데이터 송수신
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            // 클라이언트에게 메시지 전송
            out.println("Welcome to the server!");
            
            // 클라이언트로부터 메시지 수신
            String clientMessage = in.readLine();
            System.out.println("Received from client: " + clientMessage);

            // 연결 종료
            in.close();
            out.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (serverSocket != null) {
                    serverSocket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}


 클라이언트 프로그램

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

public class Client {
    public static void main(String[] args) {
        Socket clientSocket = null;

        try {
            // 서버의 IP 주소와 포트로 연결 요청
            clientSocket = new Socket("localhost", 12345);

            // 서버와 데이터 송수신
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            // 서버로부터 메시지 수신
            String serverMessage = in.readLine();
            System.out.println("Received from server: " + serverMessage);

            // 서버에게 메시지 전송
            out.println("Hello, Server!");

            // 연결 종료
            in.close();
            out.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



 
 

 

 

반응형

'Linux*security > Network' 카테고리의 다른 글

RIP 프로토콜 (Routing Information Protocol)  (0) 2024.07.11
Networking protocols  (0) 2024.07.03
HASH  (0) 2024.06.27
Triple DES, AES, SEED, ARIA, IDEA  (0) 2024.06.27
보안의 3대 요소  (0) 2024.06.27