Python UDP nhận

Tiểu sử. Lớp mạng Giao thức gói dữ liệu người dùng (UDP) cho phép bạn gửi tin nhắn mà không cần đảm bảo khả năng gửi. UDP không đáng tin cậy—mát-xa có thể bị mất hoặc giao không đúng yêu cầu. Nhưng điều này làm cho UDP cũng nhanh, nhẹ và là giao thức được lựa chọn cho nhiều tình huống phát trực tuyến, chẳng hạn như Netflix gửi tin nhắn UDP tới tất cả người xem của một chương trình cụ thể

Làm cách nào để gửi tin nhắn UDP bằng Python?

Python UDP nhận

Xem video này trên YouTube

Chúng tôi phân biệt giữa gửi và nhận tin nhắn UDP trong Python. Đối với mã được trình bày trong hướng dẫn này, bạn không cần cài đặt tùy chỉnh bất kỳ thư viện nào vì chúng tôi chỉ cần thư viện socket đã có trong thư viện chuẩn của Python. ?

Gửi tin nhắn UDP

Để gửi một tin nhắn UDP tới một chương trình đang nghe trên một địa chỉ IP và PORT đã cho, hãy ghi đè địa chỉ IP, PORT và MESSAGE rồi chạy đoạn mã sau

# SENDER

import socket

ip = "127.0.0.1"
port = 5000
msg = b"hello world"

print(f'Sending {msg} to {ip}:{port}')

sock = socket.socket(socket.AF_INET,
                     socket.SOCK_DGRAM)
sock.sendto(msg, (ip, port))

Bây giờ, bạn có thể hỏi. nếu gửi một tin nhắn không ai nghe, liệu nó có tồn tại không?

Python UDP nhận

Nhận tin nhắn UDP

Đây là cách bạn có thể tạo một bộ thu nghe địa chỉ IP và PORT và in tất cả các tin nhắn đã nhận ra màn hình

# RECEIVER

import socket

ip = "127.0.0.1"
port = 5000

sock = socket.socket(socket.AF_INET,
                     socket.SOCK_DGRAM)
sock.bind((ip, port))

print(f'Start listening to {ip}:{port}')

while True:
    data, addr = sock.recvfrom(1024) # buffer
    print(f"received message: {data}")

Bạn có thể tùy chỉnh việc xử lý tin nhắn theo ý muốn

Kỹ sư hệ thống phân tán phải thành thạo ít nhất một ngôn ngữ lập trình. Tôi biết từ kinh nghiệm cá nhân với tư cách là một nhà nghiên cứu tiến sĩ hệ thống phân tán. Nếu bạn muốn nâng cao kỹ năng Python của mình, hãy cân nhắc tham gia học viện email miễn phí của tôi để dạy cho bạn mọi thứ bạn cần để trở thành một chuyên gia Python thành thạo. Nó miễn phí

nguồn

  • https. //wiki. con trăn. org/moin/UdpLiên lạc
  • https. // vi. wikipedia. org/wiki/User_Datagram_Protocol

Python UDP nhận

Chris

Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính

Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners (NoStarch 2020), đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới

Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây

Giao thức gói dữ liệu người dùng (UDP) hoạt động khác với TCP/IP. Trong đó TCP là giao thức hướng luồng, đảm bảo rằng tất cả dữ liệu được truyền theo đúng thứ tự, UDP là giao thức hướng thông báo. UDP không yêu cầu kết nối lâu dài, vì vậy việc thiết lập ổ cắm UDP đơn giản hơn một chút. Mặt khác, các thông báo UDP phải vừa với một gói (đối với IPv4, điều đó có nghĩa là chúng chỉ có thể chứa 65.507 byte vì gói 65.535 byte cũng bao gồm thông tin tiêu đề) và việc gửi không được đảm bảo như với TCP

Máy chủ tiếng vang

Vì không có kết nối, nên máy chủ không cần lắng nghe và chấp nhận kết nối. Nó chỉ cần sử dụng bind() để liên kết ổ cắm của nó với một cổng, sau đó đợi các thông báo riêng lẻ

import socket
import sys

# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# Bind the socket to the port
server_address = ('localhost', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)

Tin nhắn được đọc từ ổ cắm bằng cách sử dụng recvfrom(), trả về dữ liệu cũng như địa chỉ của máy khách mà nó được gửi từ đó

while True:
    print >>sys.stderr, '\nwaiting to receive message'
    data, address = sock.recvfrom(4096)
    
    print >>sys.stderr, 'received %s bytes from %s' % (len(data), address)
    print >>sys.stderr, data
    
    if data:
        sent = sock.sendto(data, address)
        print >>sys.stderr, 'sent %s bytes back to %s' % (sent, address)

Máy khách Echo

Ứng dụng khách UDP echo tương tự như máy chủ, nhưng không sử dụng bind() để gắn ổ cắm của nó vào một địa chỉ. Nó sử dụng sendto() để gửi tin nhắn trực tiếp đến máy chủ và recvfrom() để nhận phản hồi