Programming/Java
TCP 소켓 통신
d-e-v-j
2024. 7. 30. 21:13
반응형
TCP 소켓 통신은 네트워크 프로그래밍에서 가장 기본적인 방법이다.
TCT)(Transmission Control Protocol) 는 신뢰성 있는 데이터 전송을 보장하는 전송 계층 프로토콜이다.
Socket은 네트워크 양쪽 간 통신을 담당하는 엔드포인트이다.
1. TCP 소켓 통신의 개념
두 개의 엔드포인트 간에 연결을 설정하여 데이터를 주고 받는다.
- 연결 지향적: 통신을 시작하기 전에 연결을 설정해야 합니다.
- 신뢰성 보장: 데이터의 순서 보장, 손실 시 재전송 등 신뢰성 있는 통신을 제공합니다.
- 양방향 통신: 데이터 송수신이 동시에 가능합니다.
2.TCP 소켓 통신의 동작방식
- 소켓 생성: 서버와 클라이언트 모두 소켓을 생성합니다.
- 서버 바인딩 및 리스닝: 서버는 특정 IP 주소와 포트 번호에 소켓을 바인딩한 후, 클라이언트의 연결 요청을 기다립니다.
- 클라이언트 연결 요청: 클라이언트는 서버의 IP 주소와 포트 번호로 연결 요청을 보냅니다.
- 연결 수락: 서버는 클라이언트의 연결 요청을 수락하여 연결을 설정합니다.
- 데이터 송수신: 연결이 설정되면, 양쪽에서 데이터를 주고받을 수 있습니다.
- 연결 종료: 데이터 전송이 끝나면, 연결을 종료합니다.
3. 예시코드
- Server
import java.io.*;
import java.net.*;
public class TCPServer {
public static void main(String[] args) {
try (ServerSocket serverSocket = new ServerSocket(6666)) {
System.out.println("Server is listening on port 6666");
while (true) {
Socket socket = serverSocket.accept();
System.out.println("New client connected");
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
String text;
while ((text = reader.readLine()) != null) {
System.out.println("Received: " + text);
writer.println("Echo: " + text);
}
socket.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
- Client
import java.io.*;
import java.net.*;
public class TCPClient {
public static void main(String[] args) {
String hostname = "localhost";
int port = 6666;
try (Socket socket = new Socket(hostname, port)) {
OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);
InputStream input = socket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(input));
BufferedReader consoleReader = new BufferedReader(new InputStreamReader(System.in));
String text;
while ((text = consoleReader.readLine()) != null) {
writer.println(text);
String response = reader.readLine();
System.out.println("Server: " + response);
}
} catch (UnknownHostException ex) {
System.out.println("Server not found: " + ex.getMessage());
} catch (IOException ex) {
System.out.println("I/O error: " + ex.getMessage());
}
}
}
Server 와 Client 양쪽에 소켓을 열어 연결하는게 중요하며
Java code 이외에 방화벽 포트 허용 등이 이뤄지지 않으면 Connect time out error가 발생할 수 있다.
TCP 소켓 통신은 신뢰성 있는 데이터 전송을 보장한다는게 가장 큰 장점이고,
나는 요즘 결제 관련된 프로젝트를 진행하면 결제 기관끼리의 데이터 통신을 소켓통신으로 구현하고 있다.
728x90
반응형
LIST