Socket 통신

[verify$y]·2025년 8월 13일

CS핵심개념

목록 보기
25/35

소켓통신

소켓이란?

  • 양방향 통신, Server와 Client가 특정 Port를 통하여 실시간으로 양방향적 통신 방식으로, 양방향이기 때문에, Server도 Client에게 요청을 보낼 수 있다. 실시간 요청과 통신 및 응답 등이 필요한 경우에 주로 사용한다
  • 소켓은 네트워크 통신을 위한 프로그램의 종착점, 즉 창구 역할을 합니다. 클라이언트와 서버는 각각 소켓을 생성하여 통신을 시작합니다
  • 소켓은 프로세스간 통신 끝에 위치하며 클라이언트와 서버가 데이터를 주고 받는데 사용된다.
  • 소켓은 OS에 의해 관리되며, IP주소와 포트번호로 식별한다. 소켓 주소는 ip + port번호

소켓통신

  • 소켓을 이용하여 클라이언트- 서버 간에 데이터를 주고 받는 방식
  • 송신측을 서버, 수신측을 클라이언트라고 말하며, 양뱡항 통신한다.

소켓 통신동작

  1. (서버) 요청수신 준비
    1. 소켓 객체 생성(ip + portnumber : 소켓 주소)
    2. 포트 바인딩
    3. 소켓 listen()
  2. (클라이언트) 소켓주소에 connect 요청
  3. (서버) 요청받으면 connect()됨
  4. (서버/클라이언트) send()/recv() 양방향 소통
  5. connect()해제


TCP/IP 소켓통신 예시

[서버] socket() -> bind() -> listen() -> accept() -> recv()/send()
[클라] socket() -> connect() -> send()/recv()

자바로 서버 소켓 간단한 구현

  • 서버
ServerSocket socket = new ServerSocket(8000); 
Socket socker = server.accept(); 
BufferedReader in = new BufferedReader(new InputStreamReader(socker.getInputStream())); 

PrintWriter out = new PrintWriter(socket.getOutputStream(), true); 
String msg = in.readLine(); 
  • 클라이언트
Socket client = new Socket("localhost", 8000); 
PrintWriter out = new PrintWriter(client.getOutputStream(), true); 



멀티 클라이언트 채팅 예제 동작 흐름(TCP)

  1. 서버 소켓 준비
    • ServerSocker 생성후 포트지정하고 bind()
    • listen()하여 클라이언트와의 연결 요청 대기
  2. 클라이언트 연결 요청
    • 클라이언트에서 Socker(host, port)로 서버 접속 시도
    • TCP 3-way-handshake로 연결 수립
  3. 서버에서 연결 수락
    • accept()가 반환한 Socket으로 클라이언트와 1:1 통신 채널 생성
    • 해당 소켓을 처리할 쓰레드를 생성
  4. 닉네임 설정
    • 클라이언트는 서버에 닉네임설정
    • 서버는 닉네임 중복 여부 검사 후 등록
    • 전체 사용자 목록에 추가, 기존 사용자들에게 입장 알림
  5. 메시지 송수신
    • 클라이언트가 채팅 메시지 전송하여 서버가 수신
    • 서버는 메시지를 읽어 명령어/일반메시지인지 판별
    • 일반메시지이면 모든 사용자에게 브로드캐스트
  6. 브로드 캐스트 처리
    • 서버는 모든 연결된 세션의 출력 스트림에 메시지를 전송
    • 자신을 제외 or 특정 대상에게만 전송
  7. 연결 종료
    • 클라이언트에서 소켓 닫기
    • 서버는 세션목록에서 제거후 나머지사용자에게 퇴장알림
    • 소켓과 스트림 자원 해제
profile
welcome

0개의 댓글