foxpacking

Programming Lessons

Java 언어 Korean

Java 총정리[96. Java TCP 통신 프로그램 구현]

Java TCP 통신 프로그램 구현

Java TCP 통신 프로그램 구현을 위해서 이전 걸음에서 쓰레드에 대한 전반적인 내용을 배웠습니다. 쓰레드가 많이 쓰이는 프로그램 구현을 이번 걸음에서 진행을 할 예정입니다. 끝까지 같이 공부를 하시면 Java TCP 통신 프로그램 구현을 이해하고 더 좋게 만들어서 도움이 되실 수 있습니다.

Java TCP 통신 프로그램 구현을 이번 걸음에서 진행을 하려고 합니다. Server와 Client를 두고 데이터를 전송하고 받아 봄으로써 통신에 기초가 되는 동작을 이해하고 Java에서 TCP통신을 어떻게 동작을 하는지 알 수 있습니다. 원론적인 내용과 코드를 같이 공유를 드려서 이해를 하는데 더욱 도움이 될 수 있습니다.

Java TCP 통신 프로그램 구현에서 Socket이란 무엇 인지와 Socket의 동작 원리 마지막으로 간단한 통신 프로그램을 구현을 해서 동작을 해볼 수 있습니다. 이번 글을 끝까지 읽고 공부를 하시면 TCP통신에 대한 이해를 할 수 있습니다.

Java통신메인사진

TCP (Transmission Control Protocol)

TCP(Transmission Control Protocol)는 인터넷에서 데이터를 신뢰성 있게 전달하기 위한 프로토콜이야. TCP는 데이터를 패킷으로 나누어 네트워크를 통해 전송하고, 수신 측에서는 이를 다시 조립하여 데이터를 복원해줘. 또한, 데이터 전송 중 손실이나 에러가 발생할 경우에도 재전송을 통해 안정적인 통신을 제공한다는 특징이 있습니다.

소켓(Socket)이란?

소켓은 네트워크 통신에 사용되는 개념으로, 서버와 클라이언트 간에 데이터를 주고받을 수 있도록 해주는 프로그래밍 인터페이스이야. TCP/IP 프로토콜을 기반으로 동작하며, 네트워크 상에서 프로세스 간 통신을 가능하게 해줍니다.

소켓 동작 과정

  1. 바인딩(Binding): 서버는 특정 포트를 바인딩하여 클라이언트의 연결을 기다린다. 이 때, 소켓은 서버의 IP 주소와 포트 번호를 지정하여 생성된다.

  2. 리스닝(Listening): 서버는 바인딩된 포트에서 클라이언트의 연결 요청을 수신하기 위해 대기한다.

  3. 통신(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간 메세지를 교환을 할 수 있습니다. 이번 글에서는 쓰레드를 사용을 안 했지만 계속적인 채팅을 만들고 싶으면 필수적으로 쓰레드를 사용을 해야합니다. 

1:1채팅프로그램 소스 확인

위의 홈페이지에 들어가면 1:1채팅 프로그램을 확인을 하실 수 있습니다.

Dolphin

About Author

Leave a comment

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

You may also like

Korean Programming 기초

IT 개발자 VS 프로축구선수 비교?

IT 개발자와 프로축구선수의 같은 점과 다른 점? 프로그래밍 공부를 하시면서 개발자로 취업을 하려고 하는데 과연 취업을 할 수 있을까? IT
Korean 클라우드

AWS 로그인 불가능, AWS고객 센터 이메일 문의 결과는?

AWS 고객센터 이메일 문의 솔직후기 AWS를 사용하기 위해 로그인을 하는 경우 이메일로 코드 번호를 보내지만 이메일로 받을 수 없는 상황이거나