🚀 IT/🌐네트워크
📘 (3) 네트워크 프로그래밍 입문 - 소켓 통신 기초
higyeong
2025. 4. 9. 09:59
반응형
Socket Communication (통신)
- server 와 client 필요
- 다중 접속을 허용할 경우 개별 접속마다 별도의 통신 관리 필요
1. 이론
- 네트워크란? (IP, 포트, 클라이언트-서버 개념)
- 네트워크는 여러 장치 (컴퓨터, 서버, 모바일 등) 가 서로 데이터를 주고 받는 구조
- 핵심개념
- IP 주소 : 장치를 식별하는 고유 주소
- 포트(port) : 한 장치 안에서 여러 서비스 (웹, 이메일 등)를 구분하는 번호
- 클라이언트(client) : 요청을 보내는 측
- 서버 (server) : 요청을 받아 처리하는 측
- 🔁 TCP vs UDP 간단 비교
항목 TCP UDP 연결 방식 연결 지향 비연결 지향 신뢰성 높음 (순서 보장, 재전송) 낮음 (순서 미보장) 속도 상대적으로 느림 빠름 사용 예 웹, 이메일, 파일전송 스트리밍, 게임, VoIP
2. 코드
- Python 기반 소켓 통신 예제
- 서버 코드 (TCP)
import socket
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(('localhost', 9999))
server.listen(1)
print("서버 대기 중...")
conn, addr = server.accept()
print(f"연결됨: {addr}")
data = conn.recv(1024).decode()
print(f"받은 메시지: {data}")
conn.send("응답 완료".encode())
conn.close()
- 클라이언트 코드 (UDP)
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('localhost', 9999))
client.send("안녕하세요 서버님".encode())
response = client.recv(1024).decode()
print(f"서버 응답: {response}")
client.close()
- Java 기반 소켓 통신 예제
- 서버 코드 (TCP)
import java.io.*;
import java.net.*;
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(9999);
System.out.println("서버 대기 중...");
Socket clientSocket = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
String inputLine = in.readLine();
System.out.println("받은 메시지: " + inputLine);
out.println("서버 응답 완료");
in.close();
out.close();
clientSocket.close();
serverSocket.close();
}
}
- 클라이언트 코드 (UDP)
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) throws IOException {
Socket socket = new Socket("localhost", 9999);
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
out.println("안녕하세요 서버!");
String response = in.readLine();
System.out.println("서버 응답: " + response);
out.close();
in.close();
socket.close();
}
}
3. 구조 - 소켓 통신 흐름 요약
✅ 서버 측
- socket() - 소켓 생성
- bind() - IP & 포트 지정
- listen() - 연결 대기
- accept() - 클라이언트 연결 수락
- send()/recv() - 데이터 송수신
- close() - 연결 종료
✅ 클라이언트 측
- socket() - 소켓 생성
- connect() - 서버 접속 요청
- send()/recv() - 데이터 송수신
- close() - 연결 종료
📊 소켓 종류 (심화)
타입 | 설명 | 예시 |
Datagram Socket | 비연결형 UDP 기반, 순서 보장 X | 스트리밍, 게임 |
Stream Socket | 연결형 TCP 기반, 신뢰성 보장 | 웹, 파일 전송 |
Raw Socket | IP 패킷 직접 송수신, 특수 목적 | 보안툴, ping 등 |
4. 실무 예시
- 실시간 채팅: WebSocket 기반
- 알림 서버: 모바일 푸시, 웹 푸시 등
- 서버간 통신: 내부 API 호출 시 소켓 통신 활용
📌 참고: 포트 번호
- 80: HTTP
- 443: HTTPS
- 22: SSH
- 8080: 개발용 웹 서버
다음 편 예고: 프로토콜의 세계로 떠나보자 → [다음 글 보러가기]
반응형