본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

JAVA

두 컴퓨터 간의 데이터 교환을 가능하게 하는 엔드포인트, 소켓 Socket

소켓 Socket

소켓은 네트워크에서 데이터를 읽고 쓰는 다양한 메서드를 제공하여 통신을 가능하게 한다.

 

소켓이란 두 컴퓨터 간의 데이터 교환을 가능하게 하는 엔드포인트(endpoint)

일반적으로 소켓은 IP 주소와 포트 번호로 식별된다.

IP 주소는 특정 컴퓨터를 식별하고, 포트 번호는 해당 컴퓨터에서 실행 중인 프로세스(프로그램)를 식별한다.

https://standout.tistory.com/1515

 

통신의 출발지 또는 도착지, 엔드포인트 endpoint

엔드포인트 endpoint 네트워크에서 데이터 통신이 시작되거나 종료되는 지점통신의 출발지 또는 도착지를 나타내는 개념 네트워크에서 데이터의 출발지와 목적지를 지정하여 통신을 관리하고

standout.tistory.com

https://standout.tistory.com/27

 

IP(IPv4와 IPv6) 주소와 DNS, DNS는 무슨일을 할까?

IP 주소우리가 쿠팡에 로그인하여 장바구니에 물건을 담을때, 우리의 컴퓨터/핸드폰 기기들은 서로를 식별하여 정보들을 주고받게 되는데, 이러한 작업을 위한 각각 기기들의 주소를 IP 주소

standout.tistory.com

https://standout.tistory.com/1514

 

포트번호, 0부터 65535까지의 범위의 통신식별 번호

포트 번호0부터 65535까지의 범위네트워크 상에서 실행 중인 프로그램을 식별하는 데 사용되는 번호,네트워크 통신을 통해 서로 통신할 때 어떤 프로세스나 서비스와 통신해야 하는지를 명확히

standout.tistory.com

 

소켓은 클라이언트와 서버 간의 양방향 통신을 담당하며, 

클라이언트 소켓과 서버 소켓으로 구분됩니다. 클라이언트 소켓은 서버에 연결하기 위해 사용되고, 서버 소켓은 클라이언트의 연결을 수락하고 통신을 수행한다.

import java.io.*;
import java.net.*;

public class UDPServer {
    public static void main(String[] args) {
        try {
            // UDP 서버 소켓 생성 및 포트 9800에 바인딩
            DatagramSocket serverSocket = new DatagramSocket(9800);
            System.out.println("UDP Server started. Waiting for client...");

            byte[] receiveData = new byte[1024];
            byte[] sendData = new byte[1024];

            while (true) {
                // 클라이언트로부터 데이터를 받기 위한 DatagramPacket 생성 및 수신 대기
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                serverSocket.receive(receivePacket);

                // 수신된 데이터를 문자열로 변환하여 출력
                String message = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Client: " + message);

                // 클라이언트의 주소와 포트를 얻어와서 에코 메시지 생성
                InetAddress clientAddress = receivePacket.getAddress();
                int clientPort = receivePacket.getPort();
                String replyMessage = "Server Echo: " + message;
                sendData = replyMessage.getBytes();

                // 에코 메시지를 클라이언트에게 전송
                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddress, clientPort);
                serverSocket.send(sendPacket);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
import java.io.*;
import java.net.*;

public class UDPClient {
    public static void main(String[] args) {
        try {
            // UDP 클라이언트 소켓 생성
            DatagramSocket clientSocket = new DatagramSocket();
            InetAddress serverAddress = InetAddress.getByName("localhost");
            int serverPort = 9800;

            // 사용자 입력을 받기 위한 BufferedReader 생성
            BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in));
            byte[] sendData;
            byte[] receiveData = new byte[1024];

            while (true) {
                // 사용자로부터 메시지 입력 받기
                System.out.print("Enter message to server: ");
                String message = userInput.readLine();
                sendData = message.getBytes();

                // 서버에 데이터 전송
                DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, serverAddress, serverPort);
                clientSocket.send(sendPacket);

                // 서버로부터 에코된 메시지 수신
                DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
                clientSocket.receive(receivePacket);

                // 수신된 에코 메시지 출력
                String replyMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
                System.out.println("Server Echo: " + replyMessage);
            }

            // clientSocket.close();
            // userInput.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}