Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- embedded server
- Basic Authentication
- Spring boot
- Spring cloud
- OpenFeign
- Spring Data
- Spring Core
- Spring Boot Starter
- Internet
- Authentication
- java
- spring security
- Web Framework
- Spring Boot Actuator
- autoconfiguration
- Retrospection
- undertow
- MicroService
- entity lifecycle
- Developer Roadmap
- spring cloud eureka
- OOP
- http client
- Spring MVC
- gradle
- hibernate
- oauth2
- Collection Framework
- conditional
- backend
Archives
- Today
- Total
경계의 경계
자바의 네트워킹과 소켓 통신 본문
네트워킹과 소켓 통신은 무엇인가
- 네트워킹 (Networking) 은 복수의 컴퓨터가 연결되어 서로 리소스를 교환하는 것을 의미한다.
- 소켓 (Socket) 은 서로 다른 두 프로그램이 네트워크 상에서 상호작용할 때 통로, 즉 각 프로그램의 엔드포인트 (Endpoint) 이다.
네트워킹 프로토콜
- TCP : Transmission Control Protocol. 두 어플리케이션 간 통신을 중재한다. 주로 TCP/IP 라 불리는 인터넷 통신에 쓰인다.
- UDP : User Datagram Protocol. 두 어플리케이션 간 데이터 패킷을 중재하는 프로토콜
네트워킹 예제
- 서로 다른 두 어플리케이션을 연결하기 위해 소켓 연결을 설정한다. 소켓 연결은 IP 주소와 포트로 구성되어 있다.
- 두 어플리케이션이 연결되면, 데이터 이동을 발생시킨다.
- 필요한 통신을 마치고 나면 연결을 해제한다.
클라이언트 (Client)
- IP 127.0.0.1, 포트 3000 으로 구성된 소켓을 구성한다.
- DataInputStream, DataOutputStream 을 통해 사용자로부터 입력을 받고 서버에 전송한다.
- “End” 문자열을 입력받을 때까지 반복 후 연결을 종료한다.
public class ClientTest {
private Socket socket = null;
private DataInputStream input = null;
private DataOutputStream output = null;
public ClientTest(String address, int port) {
try {
socket = new Socket(address, port);
System.out.println("Connected");
// 입력 받기
input = new DataInputStream(System.in);
// 소켓에 출력 보내기
output = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
System.out.println("IOException");
}
String s = "";
while (!s.equals("End")) {
try {
s = input.readLine();
output.writeUTF(s);
} catch (IOException e) {
System.out.println("IOException");
}
}
try {
input.close();
output.close();
socket.close();
} catch (IOException e) {
System.out.println("IOException");
}
}
public static void main(String[] args) {
ClientTest client = new ClientTest("127.0.0.1", 3000);
}
}
서버 (Server)
- 3000번 포트로 소켓을 지정한다. 호스트는 localhost (127.0.0.1)
- 클라이언트의 연결 요청을 accept() 메서드를 통해 허용한다.
- DataInputStream 을 통해 입력을 받는다.
- “End” 문자열이 들어오면 연결을 종료한다.
public class ServerTest {
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream input = null;
public ServerTest(int port) {
try {
server = new ServerSocket(port);
System.out.println("Server Started");
System.out.println("Waiting for a client");
socket = server.accept();
System.out.println("Client Accepted");
input = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String s = "";
while (!s.equals("End")) {
s = input.readUTF();
System.out.println(s);
}
System.out.println("Closing Connection");
socket.close();
input.close();
} catch (IOException e) {
System.out.println("IO Exception");
}
}
public static void main(String[] args) {
ServerTest server = new ServerTest(3000);
}
}
Resources
'Java' 카테고리의 다른 글
자바의 Stream (1) | 2024.02.29 |
---|---|
자바의 제네릭 (Generic) (1) | 2024.02.28 |
자바의 직렬화 (Serialization) (0) | 2024.02.22 |
자바의 Collection Framework (1) | 2024.02.20 |
자바의 메모리 관리 (1) | 2024.02.13 |