개념

소켓(Socket) 통신 정리

ris 2024. 11. 19. 10:06

소켓(Socket)이란


소켓이란 통신을 위한 접점이라고 할 수 있습니다. 보통 클라이언트와 서버 간의 통신에 자주 사용됩니다. 

더 쉽게 얘기하자면 컴퓨터들간의 통신 수단이라고 할 수 있습니다.

 

이해를 돕기 위해 간단히 축약한 통신 과정을 보여드리겠습니다.

위 사진을 순차적으로 표시하면 다음과 같습니다.

 

위 사진은 Socket 통신과는 다르지만 

  • Server와 Client의 양방향 통신이다.
  • 실시간으로 데이터를 주고 받는다.

마지막으로 코드를 통해 설명해보겠습니다.

 

import socket

svr_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

svr_sock.bind(("", 12000))

svr_sock.listen()

c_sock, addr = svr_sock.accept()

recv_data = c_sock.recv(1024)
print(recv_data.decode('utf-8'))

c_sock.close()
svr_sock.close()

 

서버 Server

  1. socket()으로 소켓 생성
  2. bind()를 통해 클라이언트와 소통할 ip와 port를 설정합니다.
  3. listen()을 통해 통신할 수 있는 상태로 설정합니다.
  4. 클라이언트의 통신 요청을 accept()로 받습니다.
  5. recv_data를 통해 데이터를 받습니다.
  6. close()를 사용해 소켓 종료
import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

sock.connect(('127.0.0.1', 12000))

sock.sendall(input().encode('utf-8'))

sock.close()

 

클라이언트 Client

  1. socket()으로 소켓 생성
  2. connect()를 통해 서버와 연결 요청
  3. sendall()을 통해 데이터 송신
  4. close()를 사용해 소켓 종료