java.net.Socket
java.net.Socket은 자바에서 네트워크 통신을 위해 사용되는 클래스 중 하나입니다.
이 클래스를 사용하면 클라이언트와 서버 간의 소켓* 연결을 생성하고 관리할 수 있습니다.
소켓 연결을 생성하려면 Socket 클래스의 생성자를 호출하여
연결하려는 서버의 IP 주소와 포트 번호를 전달해야 합니다.
이렇게 생성된 Socket 객체를 사용하여 클라이언트와 서버 간에 데이터를 읽고 쓸 수 있습니다.
Socket 클래스는 TCP/IP 프로토콜을 기반으로한 연결 지향적인 소켓 통신을 제공합니다.
또한, InetAddress 클래스를 사용하여 IP 주소를 가져오거나 설정할 수 있으며,
InputStream 및 OutputStream 클래스를 사용하여 데이터를 전송할 수 있습니다.
Socket 클래스는 다른 네트워크 클래스와 함께 사용될 수 있으며,
예를 들어 ServerSocket 클래스를 사용하여 서버 측에서 소켓 연결을 수락할 수 있습니다.
또한, 다중 클라이언트와의 통신을 처리하기 위해 멀티스레드 환경에서 사용될 수 있습니다.
Socket 클래스는 자바 SE에서 제공되며, Java 네트워크 프로그래밍에서 가장 많이 사용되는 클래스 중 하나입니다.
소켓* 설명 :
https://rebornbb.tistory.com/entry/IT-%EC%9B%B9%EC%86%8C%EC%BC%93%EC%9D%B4%EB%9E%80
Stream 설명 :
스트림(Stream)은 자바에서 데이터를 표현하고 다루는 방식 중 하나입니다. 데이터는 일련의 바이트로 구성되며, 스트림은 이러한 바이트를 일관된 방식으로 읽고 쓸 수 있는 인터페이스를 제공합니다.
스트림은 크게 두 가지 종류로 나뉩니다.
- 입력 스트림 (Input Stream):
데이터를 읽어들이는 스트림입니다. 입력 스트림은 데이터를 읽을 수 있는 인터페이스를 제공합니다. 대표적인 예로는 FileInputStream, BufferedInputStream 등이 있습니다.
- BufferedReader는 자바에서 문자열을 읽기 위한 입력 스트림 클래스 중 하나입니다.
일반적으로 InputStreamReader와 함께 사용됩니다.
BufferedReader는 한 줄씩 문자열을 읽어들이는 readLine() 메소드를 제공합니다.
- 출력 스트림 (Output Stream):
데이터를 쓰는 스트림입니다. 출력 스트림은 데이터를 쓸 수 있는 인터페이스를 제공합니다. 대표적인 예로는 FileOutputStream, BufferedOutputStream 등이 있습니다.
스트림은 일반적으로 연속적인 데이터를 처리할 때 사용합니다.
데이터가 연속적인 경우, 예를 들어 파일에서 읽어들인 데이터나 네트워크에서 전송받은 데이터, 출력할 데이터를 연속적으로 처리하기 위해 스트림 인터페이스를 사용합니다.
스트림은 버퍼링, 인코딩, 디코딩 등의 추가 기능도 제공합니다.
예를 들어 BufferedInputStream은 데이터를 버퍼링하여 입출력 성능을 향상시키며,
InputStreamReader는 문자열 인코딩을 처리할 수 있습니다.
따라서 스트림을 사용하여 데이터를 처리할 때는 이러한 추가 기능도 고려해야 합니다.
아래는 java.net.Socket 클래스를 사용하여 간단한 클라이언트 소켓을 구현한 예제입니다.
import java.net.*;
import java.io.*;
public class SimpleSocketClient {
public static void main(String[] args) throws IOException {
String hostName = "localhost"; // 연결할 호스트 이름
int portNumber = 1234; // 연결할 포트 번호
try (Socket socket = new Socket(hostName, portNumber);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()))) {
// 소켓 생성 및 입출력 스트림 생성
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
while ((userInput = stdIn.readLine()) != null) {
// 키보드 입력 받기
out.println(userInput); // 서버에 입력한 데이터 전송
System.out.println("서버로부터 받은 메시지: " + in.readLine()); // 서버로부터 받은 데이터 출력
}
} catch (UnknownHostException e) {
System.err.println("지정된 호스트를 찾을 수 없습니다: " + hostName);
System.exit(1);
} catch (IOException e) {
System.err.println("입출력 스트림을 가져올 수 없습니다: " + e);
System.exit(1);
}
}
}
이 예제는 지정된 호스트와 포트로 연결을 시도하고, 연결이 성공하면 데이터를 전송하고 수신합니다.
로컬호스트와 1234번 포트로 연결하고,
사용자가 키보드로 입력한 데이터를 서버에 전송하고,
서버로부터 받은 데이터를 콘솔에 출력합니다.
해당 예제는 예외처리가 되어 있습니다.
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] ReentrantLock 설명 (0) | 2023.05.08 |
---|---|
[JAVA] JAVA Exception 에러 출력 (0) | 2023.04.26 |
[JAVA] future 란 무엇일까? (0) | 2023.03.10 |
[JAVA] System.exit()은 무엇일까? (0) | 2023.03.10 |
[JAVA] Logging이란? (0) | 2023.03.10 |