<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> 한 줄 요약
Socket은 요청, ServerSocket은 수락 (새로운 Socket 객체 반환) InputStream, OutputStream 써서 데이터 읽기, 전달
</aside>
Socket의 기본 개념클라이언트 소켓: 클라이언트가 서버에 연결을 요청할 때 사용됩니다.
서버 소켓: 서버가 클라이언트의 연결 요청을 기다릴 때 사용됩니다. 서버 소켓이 클라이언트의 요청을 받아들이면, 새로운 Socket 객체가 생성되어 클라이언트와의 통신을 담당합니다.
Socket 객체: 두 컴퓨터 간의 네트워크 통신을 가능하게 하는 클래스입니다.
클라이언트 소켓: 서버에 연결을 요청하여 통신을 시작합니다.
서버 소켓: 클라이언트의 연결 요청을 기다리고 이를 수락하여 통신을 시작합니다
데이터 송수신: Socket 객체의 입력 스트림과 출력 스트림을 사용하여 데이터를 주고받습니다.
예1) Client에서 Server 연결 요청
import java.net.Socket;
public class SimpleClient {
public static void main(String[] args) {
String serverAddress = "localhost"; // 서버 주소
int port = 12345; // 서버 포트 번호
try (Socket socket = new Socket(serverAddress, port)) {
System.out.println("서버에 연결되었습니다: " + socket.getRemoteSocketAddress());
// 여기서 데이터 송수신을 위한 코드 작성
} catch (Exception e) {
e.printStackTrace();
}
}
}
예2) Server에서 Client 연결 요청 수락
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
int port = 12345; // 서버 포트 번호
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("서버가 포트 " + port + "에서 연결을 기다리고 있습니다.");
try (Socket clientSocket = serverSocket.accept()) {
System.out.println("클라이언트가 연결되었습니다: " + clientSocket.getInetAddress().getHostAddress());
// 여기서 데이터 송수신을 위한 코드 작성
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
예3) Server와 Client 데이터 송수신 - Server
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleServer {
public static void main(String[] args) {
int port = 12345;
try (ServerSocket serverSocket = new ServerSocket(port)) {
System.out.println("서버가 포트 " + port + "에서 연결을 기다리고 있습니다.");
try (Socket clientSocket = serverSocket.accept();
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {
System.out.println("클라이언트가 연결되었습니다: " + clientSocket.getInetAddress().getHostAddress());
String inputLine;
while ((inputLine = in.readLine()) != null) {
System.out.println("클라이언트로부터 받은 메시지: " + inputLine);
out.println("서버로부터의 응답: " + inputLine);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
예3) Server와 Client 데이터 송수신 - Client