
소켓(Socket): 네트워크 상에서 데이터를 주고받기 위한 양 끝단(EndPoint)
소켓 프로그래밍: 클라이언트-서버 간 통신을 소켓을 통해 구현하는 방식
✅ 장점: 복잡한 네트워크 세부 구현(패킷, 라우팅 등)을 몰라도, Socket 객체만으로 통신 구현 가능 (추상화됨)
[클라이언트] [서버]
📞 전화 걸기 (Socket 생성) ───▶ 📞 전화기 만들기 (ServerSocket 생성)
☎️ 전화 받기 (accept 호출)
🔗 연결 완료 ◀─── 🔗 연결 완료 → Socket 반환
🧵 실 연결 (getInput/OutputStream) ◀──▶ 🧵 실 연결 (getInput/OutputStream)
💬 데이터 송수신 ◀──▶ 💬 데이터 송수신
// 전화기 만들기
ServerSocket server = new ServerSocket(포트번호(int형));
// 전화 받기 (클라이언트 연결 수락)
Socket socket = server.accept();
// 실 뽑기 (받기용)
InputStream is = socket.getInputStream();
// 실 뽑기 (보내기용)
OutputStream os = socket.getOutputStream();
// 전화 걸기 (서버에 연결 요청)
Socket socket = new Socket("아이피 주소"(String형), 포트번호(int형));
// 실 뽑기 (받기용) + 스트림체이닝
BufferedWriter buffw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
// 실 뽑기 (보내기용) + 스트림체이닝
BufferedReader buffr = new BufferedReader(new InputStreamReader(socket.getInputStream()));
📎 관련: Stream과 3단계 스트림체이닝
ServerSocket으로 서버를 먼저 열어놔야,
그 포트로 Socket 객체나 telnet이 접속할 수 있음
✅ telnet은 "테스트용 클라이언트"
서버를 먼저 실행해두면,cmd창에서telnet [IP] [포트]명령어로 서버에 접속 시도할 수 있음
그러면 내 서버 코드의
Socket socket = server.accept();이 부분이 깨어나면서 Socket이 반환됨