Socket을 활용한 TCP server/client

 

TCP : Transmission Control Protocol

- 수신자가 전달 받지 못한 패킷을 발신자가 감지하여 재전송하기 때문에 신뢰성 높음

- 발신자가 전송한 순서대로 수신자에서 읽기 가능

-> 네트워크를 통한 데이터 전송시 패킷 손실, 잘못된 순서로 도착 등의 문제에 대해 신경쓸 필요 없음

 

파이썬에서 TCP면 socket.SOCK_STREAM으로 지정하고 socket.socket 함수로 객체 생성

UDP면 socket.SOCK_DGRAM을 지정해 객체 생성

- UDP는 수신자가 패킷을 전달 받았는지 발신자가 신경쓰지 않으며 발신자가 전송한 순서와 수신자가 전송한 순서가 다를 수 있음

 

TCP에 대한 데이터 플로우

 

1. 서버에서 소켓 객체 생성 (socket)

2. 네트워크 인터페이스와 포트 번호 연결 (bind)

3. 클라이언트 접속 허용 (listen)

4. 클라이언트에서 소켓 객체 생성 (socket)

5. 지정한 HOST와 PORT를 사용해 서버에 접속 (connect)

     - 3-way handshake 시작

         참고 : https://sleepyeyes.tistory.com/4

6. 서버에서 accept 함수에서 대기하다가 클라이언트가 접속하면 새로운 소켓을 리턴

7. send와 recv 함수를 호출하여 data를 주고 받음

8. 클라이언트가 close를 요청하면 서버는 클라이언트의 소켓을 닫음

 

code example

https://github.com/hyeonukdev/Python-Socket

 

hyeonukdev/Python-Socket

Contribute to hyeonukdev/Python-Socket development by creating an account on GitHub.

github.com

 

반응형

'SW ENGINEERING > Programing' 카테고리의 다른 글

Python Socket : 그룹 채팅  (0) 2021.06.28
Python Socket : 1대1 채팅  (0) 2021.06.28
RESTful API  (0) 2021.05.31
ERROR 처리  (0) 2021.03.08
endpoint vs api  (0) 2021.03.02
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기