Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코코와 나

Python socket basic implementation 본문

코드

Python socket basic implementation

코코빵댕이 2022. 12. 21. 17:09

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)

 

Comments