소켓 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();
}
}
}