Khởi tạo VPS trong 60 giây · Hoàn tiền trong 7 ngày · Hỗ trợ kỹ thuật 24/7
Bitech Bitech
Hướng dẫn

Hướng dẫn lập trình Socket trong Python: Xây dựng kết nối Server và Client

Hướng dẫn từng bước lập trình Socket trong Python để tạo mô hình TCP Server - Client, xử lý đa kết nối và khắc phục các lỗi mạng phổ biến.

Giới thiệu về Socket Programming trong Python

Lập trình Socket (Socket Programming) là phương pháp cho phép hai nút (nodes) trên mạng giao tiếp và truyền nhận dữ liệu với nhau. Trong Python, thư viện chuẩn socket cung cấp các API mạnh mẽ giúp nhà phát triển dễ dàng xây dựng các ứng dụng mạng dựa trên mô hình Client-Server sử dụng giao thức TCP hoặc UDP.

Bài viết này sẽ hướng dẫn bạn cách tạo một Server và Client kết nối qua giao thức TCP cơ bản, kèm theo giải pháp xử lý các lỗi thường gặp.

Hướng dẫn tạo Socket Server

Socket Server có nhiệm vụ lắng nghe các kết nối từ phía Client, nhận tin nhắn và gửi lại phản hồi.

Các bước thực hiện:

  1. Khởi tạo đối tượng socket.
  2. Ràng buộc (bind) socket với địa chỉ IP và cổng (port).
  3. Lắng nghe (listen) các kết nối đến.
  4. Chấp nhận (accept) kết nối và tiến hành truyền nhận dữ liệu.
import socket

def run_server():
    # Khởi tạo TCP Socket
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # Thiết lập cho phép tái sử dụng Port ngay lập tức
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    
    host = '127.0.0.1'
    port = 65432
    server_socket.bind((host, port))
    
    # Lắng nghe tối đa 5 kết nối trong hàng đợi
    server_socket.listen(5)
    print(f"[SERVER] Đang lắng nghe tại {host}:{port}...")

    # Chấp nhận kết nối từ Client
    client_socket, client_address = server_socket.accept()
    print(f"[SERVER] Kết nối thành công từ {client_address}")

    # Nhận dữ liệu từ Client (tối đa 1024 bytes)
    data = client_socket.recv(1024).decode('utf-8')
    print(f"[SERVER] Nhận tin nhắn: {data}")

    # Gửi phản hồi lại Client
    response = "Chào Client, Server đã nhận được tin nhắn!"
    client_socket.send(response.encode('utf-8'))

    # Đóng kết nối
    client_socket.close()
    server_socket.close()

if __name__ == '__main__':
    run_server()

Hướng dẫn tạo Socket Client

Socket Client gửi yêu cầu kết nối tới Server, truyền dữ liệu và nhận kết quả phản hồi.

Các bước thực hiện:

  1. Khởi tạo đối tượng socket.
  2. Kết nối (connect) tới IP và Port của Server.
  3. Gửi dữ liệu và chờ nhận phản hồi.
  4. Đóng kết nối socket.
import socket

def run_client():
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    host = '127.0.0.1'
    port = 65432

    # Kết nối tới Server
    client_socket.connect((host, port))
    print("[CLIENT] Đã kết nối tới Server.")

    # Gửi dữ liệu
    message = "Xin chào Server từ Python Client!"
    client_socket.send(message.encode('utf-8'))

    # Nhận phản hồi từ Server
    reply = client_socket.recv(1024).decode('utf-8')
    print(f"[CLIENT] Phản hồi từ Server: {reply}")

    # Đóng kết nối
    client_socket.close()

if __name__ == '__main__':
    run_client()

Xử lý lỗi thường gặp và nâng cấp ứng dụng

1. Lỗi "Address already in use"

Lỗi này xuất hiện khi bạn khởi động lại Server nhưng Port cũ chưa kịp giải phóng. Hãy sử dụng tùy chọn SO_REUSEADDR trước khi thực hiện hàm bind(): server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

2. Xử lý đa kết nối (Multithreading)

Mặc định, Server đơn giản ở trên chỉ xử lý được một Client tại một thời điểm. Để hỗ trợ nhiều Client đồng thời, bạn có thể sử dụng module threading để tạo một luồng riêng cho mỗi kết nối client_socket mới.

3. Định dạng dữ liệu (Encoding/Decoding)

Dữ liệu truyền qua Socket trong Python bắt buộc ở dạng Bytes. Do đó, bạn luôn phải mã hóa chuỗi bằng .encode('utf-8') khi gửi và giải mã bằng .decode('utf-8') khi nhận.

Tổng kết

Socket Programming trong Python là kiến thức nền tảng quan trọng giúp bạn phát triển ứng dụng trò chuyện (chat), hệ thống IoT hoặc các dịch vụ mạng phân tán. Việc hiểu rõ cơ chế hoạt động của Socket sẽ giúp bạn chủ động tối ưu và xử lý các sự cố mạng hiệu quả.


Ngày phát hành: 08/06/2026
Nguồn: www.digitalocean.com