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
- continue문
- 상수
- 컴파일
- this예약어
- 포함관계
- JAVA기초
- 형 변환
- 자바 멀티스레딩
- break문
- JAVA객체지향
- for문
- multi-threading
- 시스템 환경 변수 편집
- Java
- 접근제어지시자
- 메서드
- 반복문
- 연관관계
- 인텔리제이 한글 깨짐 해결법
- java변수
- 메서드 오버로딩
- IntelliJ IDEA
- 인텔리제이 기초 설정
- Java데이터 타입
- 집합관계
- 생성자
- function
- Thread
- OPP개념
- While
Archives
- Today
- Total
최원종의 개발 블로그
소켓(Socket) 본문
소켓 정의
프로그램 사이 연결을 위한 소프트웨어 인터페이스
두 프로그램이 네트워크로 데이터를 주고받기 위한 연결 끝점
[내 프로그램] [상대방 프로그램]
| |
소켓 A ────── 네트워크 ────── 소켓 B
| |
(전화기) (전화기)
I/O단원과 소켓 단원 차이점
I/O 단원:
[파일] ── FileInputStream ──► 내 컴퓨터 [프로그램]
내 컴퓨터 [프로그램] ── FileOutputStream ──► [파일]
소켓 단원:
내 컴퓨터 [프로그램] ──소켓──► 네트워크 ──► 다른 컴퓨터 [프로그램]
I/O단원에서 파일 다룰 때
FileInputStream fis = new FileInputStream("a.txt");
FileOutputStream fos = new FileOutputStream("b.txt");
int data = fis.read(); // 파일에서 읽기
fos.write(data); // 파일에 쓰기
소켓이 파일 다룰 때
- read()와 write()가 그대로이다.
- 대상이 파일에서 네트워크로 바뀌었을 뿐, I/O 에서 배운 스트림 개념이 소켓에서도 똑같이 쓰인다.
Socket socket = new Socket("localhost", 5000);
InputStream in = socket.getInputStream(); // 상대방이 보낸 데이터 읽기
OutputStream out = socket.getOutputStream(); // 상대방에게 데이터 보내기
int data = in.read(); // 네트워크에서 읽기
out.write(data); // 네트워크로 쓰기
파일 I/O : FileInputStream ── read() ──► 내 프로그램
FileOutputStream ◄── write() ── 내 프로그램
소켓 I/O : socket.getInputStream() ── read() ──► 내 프로그램
socket.getOutputStream() ◄── write() ── 내 프로그램
TCP vs UDP - 두 가지 방식
TCP (Transmission Control Protocol) - 신뢰성 우선
- 연결을 먼저 맺고 데이터를 주고받음
- 데이터가 순서대로, 빠짐없이 전달됨
- 예시: 카카오톡 메시지, 파일 다운로드, 이메일
UDP (User Datagram Protocol) - 속도 우선
- 연결 없이 바로 데이터를 전송
- 일부 데이터가 빠지거나 순서가 바뀔 수 있음
- 예시: 유튜브 라이브, 온라인 게임, 화상통화
TCP와 UDP가 필요한 이유
카카오톡 메시지가 중간에 잘리면? → 큰일남 → TCP
유튜브 라이브가 0.1초 버벅거리면? → 감수 가능 → UDP
파일 다운로드 중 일부가 손상되면? → 큰일남 → TCP
온라인 게임 위치가 가끔 튀면? → 감수 가능 → UDP
서버와 클라이언트
서버 (Server)
- 먼저 켜놓고 기다리는 쪽
- 특정 포트 번호에서 연결 요청을 기다림
- 예시: 카카오톡 서버, 유튜브 서버
클라이언트 (Client)
- 서버에 연결을 요청하는 쪽
- 서버의 주소와 포트 번호를 알고 연결
- 예시: 내 폰의 카카오톡 앱, 내 브라우저
포트 번호
컴퓨터 프로그램이 여러개 동시에 실행되고 있을 때 외부에서 데이터가 들어오면
어느 프로그램에 데이터를 줘야 하는지 구분하는 것
- ex) 크롬, 카카오톡, 게임 실행 중 카톡이 오면 카톡에게 데이터를 주기 위해 포트번호가 존재함.
IP 주소 = 건물 주소 (어느 컴퓨터인지)
포트 번호 = 호실 번호 (그 컴퓨터의 어느 프로그램인지)
| 범위 | 이름 | 예시 |
| 0 ~ 1023 | 잘 알려진 포트 | HTTP(80), HTTPS(443) |
| 1024 ~ 49151 | 등록된 포트 | 애플리케이션용 |
| 49152 ~ 65535 | 동적/사설 포트 | 임시 사용 |
소켓 통신의 전체 흐름
서버 클라이언트
| |
| 1. ServerSocket(5000) 생성 |
| 포트 5000 열고 대기 |
| |
| 2. accept() ─── 멈춤 ──────────────────────► |
| 클라이언트가 올 때까지 기다림 |
| |
| 3. new Socket("localhost", 5000)
| 서버에 연결 요청 |
| |
| 4. 연결 수락, Socket 반환 ◄───────────────── |
| |
| 5. 데이터 송수신 ◄───────────────────────────►|
| |
| 6. close() 연결 종료 |
서버에서 ServerSocket 과 Socket 이 모두 등장하는 이유
ServerSocket = 문지기 역할 (포트를 열고 연결 요청만 기다림)
Socket = 실제 통신 담당 (연결된 클라이언트와 데이터를 주고받음)
클라이언트가 연결하면 → ServerSocket 이 새 Socket 을 만들어서 반환
이후 ServerSocket 은 다음 연결을 기다리고, Socket 이 실제 통신을 맡음
요약정리
소켓
- 두 프로그램이 네트워크로 데이터를 주고받는 연결 끝점
- I/O 에서 배운 InputStream / OutputStream 이 그대로 사용됨
TCP vs UDP
- TCP : 신뢰성 보장 → 채팅, 파일 전송
- UDP : 속도 우선 → 게임, 라이브 스트리밍
포트 번호
- IP 주소 = 컴퓨터 주소, 포트 번호 = 프로그램 주소
서버 vs 클라이언트
- 서버 : ServerSocket(대기) + Socket(통신)
- 클라이언트 : Socket 만 사용
'Java > JAVA 유용한 클래스' 카테고리의 다른 글
| (소켓-3) 1:1 단방향 통신 -클라이언트 (0) | 2026.03.26 |
|---|---|
| (소켓 - 2) 1:1 단방향 통신 - 서버 (0) | 2026.03.26 |
| 파일 복사 기능 만들기 (0) | 2026.03.25 |
| 문자 기반 스트림 /보조 스크림 실습 (0) | 2026.03.25 |
| 보조 기반 스트림 ( 버퍼 스트림) (0) | 2026.03.24 |
