Lập trình Socket UDP Python

Lập trình Socket UDP

Tương tự như lập trình Socket TCP, chúng ta cũng sẽ học về lập trình socket UDP trong
Python, bao gồm thiết lập một kết nối UDP, làm việc với các sockets phi kết nối, và
gửi và nhận dữ liệu trên UDP. Chúng ta sẽ sử dụng một ví dụ tương tự như đã sử dụng trong
phần trước, với một server cái lắng nghe cho các thông điệp đi đến và gửi một trả lời quay
trở lại client.

Thiết lập một kết nối UDP

Không giống TCP, UDP là một giao thức phi kết nối, có nghĩa là không cần thiết lập một kết
nối giữa máy chủ và máy khách. Thay vào đó, server và client đơn giản gửi và nhận dữ liệu mà
không thiết lập một kết nối chính thức.

Làm việc với các Sockets phi kết nối

Để tạo một UDP server, bạn cần tạo một socket, gắn nó với một địa chỉ IP và cổng, và bắt đầu lắng
nghe cho các datagrams đi đến. Các bước sau minh hoạ làm cách nào giành cái này:
Tạo một Socket:

import socket
server_socket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)

Gắn socket vào một địa chỉ IP và cổng:

address = (‘127.0.0.1’, 12345)
server_socket.bind(address)

Trên phía máy khách, bạn cần tạo một socket, và bạn có thể trực tiếp gửi và nhận dữ liệu mà không kết
nối với máy chủ.
Tạo một socket:

import socket
client_socket = socket.socket(socket.AF_INET,
socket.SOCK_DGRAM)

Gửi và nhận dữ liệu trên UDP

Gửi dữ liệu:
Để gửi dữ liệu trên UDP, bạn có thể sử dụng phương thức sendto() của socket object. Phương thức này lấy
hai đối số: dữ liệu sẽ gửi (một object như bytes) và địa chỉ đích đến (một tuple chứa địa chỉ IP và số cổng).

Ví dụ (phía máy khách):
data = “Hello, Server!”
server_address = (‘127.0.0.1’, 12345)
client_socket.sendto(data.encode(), server_address)

Nhận dữ liệu:
Để nhận dữ liệu trên UDP, bạn có thể sử dụng phương thức recvfrom() của socket object. Phương thức này lấy một
đối số đơn, lượng dữ liệu tối đa (bằng bytes) sẽ nhận, và trả về dữ liệu được nhận như một object như bytes và
địa chỉ nguồn.

Ví dụ (phía máy khách)
data, client_address = server_socket.recvfrom(1024)
print(f”Received data: {data.decode()} from
{client_address}”)

Chia sẻ

Leave a Reply

Your email address will not be published. Required fields are marked *