>  기사  >  백엔드 개발  >  Python은 UDP 및 TCP 통신을 어떻게 구현합니까?

Python은 UDP 및 TCP 통신을 어떻게 구현합니까?

王林
王林앞으로
2023-05-08 11:46:071885검색

1. UDP

UDP는 연결이 없고 신뢰할 수 없는 전송 프로토콜입니다. TCP에 비해 UDP는 데이터 전송 속도가 빠르고 전송 지연이 적다는 장점이 있지만 안정적인 데이터 전송을 보장하지 않으며 데이터가 필요합니다. 재전송, 검증 및 기타 처리.

다음은 간단한 UDP 전송 예시 코드입니다.

import socket

UDP_IP = '127.0.0.1'   # 目标IP地址
UDP_PORT = 5005        # 目标端口号
MESSAGE = b"Hello, World!"   # 要发送的数据

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 发送数据
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

# 关闭套接字
sock.close()

다음은 간단한 UDP 수신 예시 코드입니다.

import socket

UDP_IP = '127.0.0.1'   # 监听IP地址
UDP_PORT = 5005        # 监听端口号

# 创建UDP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 绑定套接字到指定IP地址和端口号
sock.bind((UDP_IP, UDP_PORT))

# 接收数据
data, addr = sock.recvfrom(1024)   # 一次最多接收1024字节的数据

print("Received message:", data)

# 关闭套接字
sock.close()

UDP 통신에서는 데이터 패킷의 크기 제한으로 인해 데이터는 조각화되어 있으며, 수신된 데이터도 데이터 무결성을 보장하기 위해 캐시하고 접합해야 합니다.

IPv4 네트워크에서 UDP 패킷의 최대 길이는 IP 헤더와 UDP 헤더의 크기를 포함하여 64KB(65535바이트)입니다. 실제 애플리케이션에서는 네트워크 장비 및 운영 체제의 제한으로 인해 일반적으로 UDP 패킷의 크기에 일부 제한이 적용됩니다. 예를 들어 일부 라우터와 방화벽은 UDP 패킷의 최대 길이를 제한할 수 있으며 일부 운영 체제에서는 UDP 패킷에 일부 제한을 적용할 수도 있습니다.

데이터 전송에 UDP를 사용할 때는 데이터 패킷의 크기 제한에 주의하고 너무 큰 데이터 패킷을 보내지 않도록 노력해야 합니다. getsockopt() 메서드를 사용하여 시스템의 UDP 패킷 크기 제한을 쿼리할 수 있습니다(예:

import socket

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
max_size = sock.getsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF)
print(f"Max size of UDP packet: {max_size} bytes")

2). TCP

TCP는 데이터 전송에 대한 신뢰성과 무결성을 보장하는 안정적인 연결 지향 전송 프로토콜입니다. 전송 효율이 상대적으로 낮습니다.

다음은 간단한 TCP 서버 및 클라이언트 샘플 코드입니다.

TCP 서버:

import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

# 创建TCP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 绑定IP地址和端口号
sock.bind((IP, PORT))

# 开始监听
sock.listen(1)

print(f"Server listening on {IP}:{PORT}...")

# 接受客户端连接
conn, addr = sock.accept()
print(f"Connected by {addr[0]}:{addr[1]}")

# 接收数据
data = conn.recv(1024)
print(f"Received data: {data.decode()}")

# 发送数据
msg = b"Hello, Client!"
conn.sendall(msg)

# 关闭连接
conn.close()

TCP 클라이언트:

import socket

# 设置IP地址和端口号
IP = '127.0.0.1'
PORT = 8888

# 创建TCP套接字
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接服务器
sock.connect((IP, PORT))

# 发送数据
msg = b"Hello, Server!"
sock.sendall(msg)

# 接收数据
data = sock.recv(1024)
print(f"Received data: {data.decode()}")

# 关闭连接
sock.close()

TCP 통신에서는 데이터 전송이 연결을 통해 수행되어야 하므로 먼저 연결을 설정한 다음 데이터를 전송하고 마지막으로 연결을 닫습니다. TCP는 연결 지향적 전송 프로토콜이므로 3방향 핸드셰이크와 같은 복잡한 연결 설정 과정이 필요하지만 UDP보다 효율성은 떨어지지만 신뢰성이 높습니다.

위 내용은 Python은 UDP 및 TCP 통신을 어떻게 구현합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제