코코와 나
Python socket basic implementation 본문

TCP 소켓을 통해서 두 호스트가 연결되면, 상호간에 데이터의 송수신이 가능한 상태가 된다.
동시에 각각의 호스트는 각각 입력버퍼와 출력버퍼를 갖는다.
TCP 통신의 데이터 송수신은 데이터의 경계가 없다는 것에 유의하자, 위에서 언급한 것처럼 TCP는 통신 데이터의 입출력의 흐름제어를 담당한다. 이때 TCP는 슬라이딩 원도우(Sliding Window)방식을 활용한다. 슬라이딩 원도우는 각 호스트의 입출력버퍼의 상태를 확인하여 수신 측의 입력버퍼가 수신 가능한 크기의 데이터만을 전송하고 나머지 데이터는 출력버퍼에 저장해 두었다가 수신 측 입력버퍼가 비워지면 이어서 데이터를 전송하는 형태이다.
이와 같은 방식은 신뢰성있는 데이터 송수신을 보장하지만 수신측에서 수신 데이터에 대한 처리에 딜레이가 있거나 입력 버퍼 의 저장 공간이 작은 경우에 TCP통신이 지연될 수 있음을 보여준다.
따라서 송수신 측면에서 데이터 크기에 대한 합의가 선행되는 경우에 출력값에 대한 누락 없이 데이터를 수신할 수 있다.
example of echo
import socket
HOST = "127.0.0.1" # localhost
PORT = 5000 # Port to listen on (non-privileged ports are > 1023)
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind((HOST, PORT))
s.listen()
conn, addr = s.accept()
with conn:
print(f"Connected by {addr}")
while True:
data = conn.recv(1024)
if not data:
break
conn.sendall(data)
import socket
HOST = "127.0.0.1" # The server's hostname or IP address
PORT = 5000 # The port used by the server
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.connect((HOST, PORT))
s.sendall(b"Hello, world")
data = s.recv(1024)
print("Received data : ", data)
'코드' 카테고리의 다른 글
| Tensorflow FedAVG (0) | 2022.12.21 |
|---|---|
| Socket steaming (0) | 2022.12.21 |
| FedAVG pytorch implementation (0) | 2022.12.21 |
| 효율적인 프로그램과 리스트 (1) | 2022.12.21 |
| 1. Titanic 데이터에 대한 시그모이드와 교차 엔트로피를 통한 이진 분류 (0) | 2021.07.27 |
Comments