Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한 전반적인 내용을 배웠습니다. 쓰레드가 많이 쓰이는 프로그램 구현을 이번 걸음에서 진행을 할 예정입니다. 끝까지 같이 공부를 하시면 Java TCP 통신 프로그램 구현을 이해하고 더 좋게 만들어서 도움이 되실 수 있습니다.
Java TCP 통신 프로그램 구현을 이번 걸음에서 진행을 하려고 합니다. Server와 Client를 두고 데이터를 전송하고 받아 봄으로써 통신에 기초가 되는 동작을 이해하고 Java에서 TCP통신을 어떻게 동작을 하는지 알 수 있습니다. 원론적인 내용과 코드를 같이 공유를 드려서 이해를 하는데 더욱 도움이 될 수 있습니다.
Java TCP 통신 프로그램 구현에서 Socket이란 무엇 인지와 Socket의 동작 원리 마지막으로 간단한 통신 프로그램을 구현을 해서 동작을 해볼 수 있습니다. 이번 글을 끝까지 읽고 공부를 하시면 TCP통신에 대한 이해를 할 수 있습니다.
TCP (Transmission Control Protocol)
TCP(Transmission Control Protocol)는 인터넷에서 데이터를 신뢰성 있게 전달하기 위한 프로토콜이야. TCP는 데이터를 패킷으로 나누어 네트워크를 통해 전송하고, 수신 측에서는 이를 다시 조립하여 데이터를 복원해줘. 또한, 데이터 전송 중 손실이나 에러가 발생할 경우에도 재전송을 통해 안정적인 통신을 제공한다는 특징이 있습니다.
소켓(Socket)이란?
소켓은 네트워크 통신에 사용되는 개념으로, 서버와 클라이언트 간에 데이터를 주고받을 수 있도록 해주는 프로그래밍 인터페이스이야. TCP/IP 프로토콜을 기반으로 동작하며, 네트워크 상에서 프로세스 간 통신을 가능하게 해줍니다.
소켓 동작 과정
바인딩(Binding): 서버는 특정 포트를 바인딩하여 클라이언트의 연결을 기다린다. 이 때, 소켓은 서버의 IP 주소와 포트 번호를 지정하여 생성된다.
리스닝(Listening): 서버는 바인딩된 포트에서 클라이언트의 연결 요청을 수신하기 위해 대기한다.
통신(Communication): 클라이언트가 서버에 연결 요청을 보내면, 서버는 그 요청을 수락하여 클라이언트와 통신을 시작한다. 서버와 클라이언트 간에는 데이터를 주고받을 수 있는 입출력 스트림이 형성되며, 이를 통해 데이터를 교환한다.
Java TCP 통신 프로그램 코드
import java.net.*;
public class Server {
public static void main(String[] args) {
try {
// 서버 소켓 생성
ServerSocket serverSocket = new ServerSocket(9999);
// 클라이언트 접속 대기
System.out.println("서버 대기 중...");
Socket socket = serverSocket.accept();
System.out.println("클라이언트가 접속했습니다.");
// 클라이언트로부터 메시지 받기
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = in.readLine();
System.out.println("클라이언트로부터 받은 메시지: " + message);
// 클라이언트에게 메시지 보내기
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("서버로부터 안녕!");
// 소켓 및 스트림 닫기
socket.close();
serverSocket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
try {
// 서버에 접속
Socket socket = new Socket("localhost", 9999);
// 서버로 메시지 보내기
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
out.println("안녕하세요, 서버!");
// 서버로부터 메시지 받기
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String message = in.readLine();
System.out.println("서버로부터 받은 메시지: " + message);
// 소켓 및 스트림 닫기
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
위 소스를 실행을 하게 되면 Server와 Client간 메세지를 교환을 할 수 있습니다. 이번 글에서는 쓰레드를 사용을 안 했지만 계속적인 채팅을 만들고 싶으면 필수적으로 쓰레드를 사용을 해야합니다.