교수님이 쓰라고 하셔서 쓰는 그런데 은근 재밌는 듯

JAVA

[JAVA] Network & Socket

shinyunha 2025. 11. 4. 11:55

용어

Host: 서버 이름

    eg) www.이름이 들어감.com

 

DNS: 도메인 이름을 IP 주소로 변환하는 시스템

 

IP 주소: 장치를 식별하는 고유한 숫자 주소 

    - 공인 IP: 인터넷에서 고유하게 식별됨

    - 사설 IP: 내부 네트워크용

 

    내 IP 주소 확인하는 법!

    윈도우 명령창에 ipconfig -> IPv4 주소 확인

 

port: 하나의 IP 주소 내에서 여러 프로세스를 구분하는 번호

    - 같은 포트에 동시 접근 불가

 

URL: 웹 자원의 전체 경로

 

Protocol: 통신 규칙, 데이터 전송 방식

    eg) HTTP, TCP


TCP 

연결 지향: 통신 전에 1:1 연결을 먼저 맺음 - 통신 가능한지도 확인, 잘 받았는지도 확인

두 시스템 간에 신뢰성 있는 데이터 전송 관장

자신을 가리키는 주소: 127.0.0.1 (localhost)

IP: Internet Protocol

송신 호스트와 수신 호스트가 데이터를 주고 받는 것을 관장

주소가 숫자로 구성됨 -> DNS(Domain Name Server) 문자열로 된 도메인 이름으로 변환

 

서버

포트를 열어두고 클라이언트의 연결 요청을 기다림

Java에서 ServerSocket 클래스 사용

    - accopt() 접속요청 받기

    - close() ServerSocket 닫기

 

클라이언트

서버의 주소를 알고 서버에 연결을 요청

Java에서는 Socket 클래스 사용

    - getInputStream() 입력 스트림 반환

    - getOutputStream() 출력 스트림 반환


UDP

비연결 지향: 연결 과정 없이 그냥 데이터를 보냄 - 냅다 그냥 보냄

간단하고 빠른 속도의 전송 관장


Socket 프로그래밍

1. 서버는 서버 소켓을 생성하고 클라이언트 연결 요청을 기다림 (Listen)

SocketSocket serverSocket = new ServerSocket(포트번호);

2. 클라이언트가 서버에게 연결 요청

Socket s = new Socket("서버 IP", 포트번호);

3. 서버가 연결 요청 수락 (accept)

Socket  socket = serverSocket.accept();

4. 네트워크 입출력 스트림 생성

    스트림: 데이터가 흐르는 통로

    - InputStream: 데이터를 읽는(입력받는) 통로

    - OutputStream: 데이터를 쓰는(출력하는) 통로

Scanner input = new Scanner(socket.getInputStream());
PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));

인코딩 방식 선택 가능


포트 열어주는 법

Window 방화벽 설정에서 "고급설정"

인타운드 규칙에 새 규칙 -> 포트 -> TCP -> 포트번호 입력

'JAVA' 카테고리의 다른 글

[JAVA] Spring Boot - 1  (0) 2025.11.18
[JAVA] DB  (0) 2025.11.16
[JAVA] GUI & Thread - 알낳기  (0) 2025.10.31
[JAVA] 중간고사 대비  (0) 2025.10.19
[JAVA] 디자인 패턴 - 템플릿 메소드  (0) 2025.10.17