소켓 프로그래밍
2024. 7. 2. 22:38ㆍLinux*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 |