소켓 Socket
소켓은 네트워크에서 데이터를 읽고 쓰는 다양한 메서드를 제공하여 통신을 가능하게 한다.
소켓이란 두 컴퓨터 간의 데이터 교환을 가능하게 하는 엔드포인트(endpoint)
일반적으로 소켓은 IP 주소와 포트 번호로 식별된다.
IP 주소는 특정 컴퓨터를 식별하고, 포트 번호는 해당 컴퓨터에서 실행 중인 프로세스(프로그램)를 식별한다.
https://standout.tistory.com/1515
https://standout.tistory.com/27
https://standout.tistory.com/1514
소켓은 클라이언트와 서버 간의 양방향 통신을 담당하며,
클라이언트 소켓과 서버 소켓으로 구분됩니다. 클라이언트 소켓은 서버에 연결하기 위해 사용되고, 서버 소켓은 클라이언트의 연결을 수락하고 통신을 수행한다.
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();
}
}
}