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
- 인텔리제이 한글 깨짐 해결법
- Thread
- 반복문
- JAVA객체지향
- multi-threading
- function
- OPP개념
- IntelliJ IDEA
- Java
- break문
- 시스템 환경 변수 편집
- Java데이터 타입
- JAVA기초
- 접근제어지시자
- 자바 멀티스레딩
- 메서드 오버로딩
- 컴파일
- 인텔리제이 기초 설정
- 메서드
- 생성자
- 집합관계
- While
- 상수
- 연관관계
- this예약어
- continue문
- 포함관계
- java변수
- 형 변환
- for문
Archives
- Today
- Total
최원종의 개발 블로그
(소켓-3) 1:1 단방향 통신 -클라이언트 본문
소켓-2에서 만든 서버에 연결해 메시지를 보내는 클라이언트 설계.
클라이언트 ── 메시지 전송 ──► 서버
(이번 단원) (소켓-2)
서버 vs 클라이언트
서버 : ServerSocket (대기) + Socket (통신) + BufferedReader (읽기)
클라이언트 : Socket (통신) + PrintWriter (쓰기)
-코드
package client.ch01;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
//소켓 통신을 위한 클라이언트 측 도구
public class ClientFile {
public static void main(String[] args) {
//클라이언트는 접글할 서버 컴퓨터에 IP 주소와 포트 번호를 알고 있어야 한다
try (Socket socket = new Socket("192.168.4.21", 5000)) {
//Socket socket = new Socket("localhost", 5000)
//위 코드가 실행되는 순간 내부적으로 이미 서버 컴퓨터와 연결을 시도한 상태
PrintWriter writer = new PrintWriter(socket.getOutputStream(), true);
//writer.write("Hello ~ Server ~~" + "\n"); //개행문자까지 보내야 정상 보내짐
writer.println("안녕 반가워");
} catch (UnknownHostException e) {
throw new RuntimeException(e);
} catch (IOException e) {
}
}
}
소켓에서 PrintWriter를 쓰는 이유는 바로 auto flush 때문이다
| PrintWriter | BufferedWriter | |
| 제공 메서드 | print(), println(), printf() | write(), newLine() |
| String 직접 출력 | 가능 | 가능 |
| auto flush | 있음 (생성자 두 번째 인자 true/false) | 없음, 직접 flush() 호출 필요 |
| 적합한 용도 | 소켓 통신 | 파일 쓰기 |
localhost란?
localhost = 내 컴퓨터 자신을 가리키는 주소 (IP: 127.0.0.1)
new Socket("localhost", 5000)
→ 내 컴퓨터의 5000번 포트로 연결 (같은 컴퓨터에서 테스트할 때)
실제 다른 컴퓨터와 통신할 때:
new Socket("192.168.0.5", 5000) ← 상대방의 IP 주소
서버와 클라이언트 전체 흐름
서버 (ServerFile) 클라이언트 (ClientFile)
| |
ServerSocket(5000) |
accept() 대기 ──────────────────── new Socket("localhost", 5000)
| 연결 수락! |
| |
reader.readLine() ◄─── "Hello, Server!" ─── writer.println()
| |
"Hello, Server!" 출력 종료
|
종료
실행 방법 및 결과
1. ServerFile 실행 → "서버 시작 - 포트 5000 에서 대기 중..."
2. ClientFile 실행 → "서버에 연결됐습니다." / "메시지를 보냈습니다."
3. ServerFile 콘솔 → "클라이언트가 연결됐습니다." / "클라이언트 메시지 : Hello, Server!"
핵심 요약
new Socket("localhost", 5000) → 서버 주소와 포트로 연결 요청
PrintWriter(out, true) → 서버로 메시지를 보내는 출력 스트림, true = 즉시 전송
writer.println() → 줄바꿈 자동 추가, 서버 readLine() 과 맞물림
실행 순서 → 서버 먼저 → 클라이언트 나중
'Java > JAVA 유용한 클래스' 카테고리의 다른 글
| (소켓 - 5) 1:1 실시간 채팅(멀티스레드) (0) | 2026.03.27 |
|---|---|
| (소켓 - 4) 1: 1 양방향 통신 (0) | 2026.03.27 |
| (소켓 - 2) 1:1 단방향 통신 - 서버 (0) | 2026.03.26 |
| 소켓(Socket) (0) | 2026.03.26 |
| 파일 복사 기능 만들기 (0) | 2026.03.25 |
