Hướng dẫn python socket receive thread - chuỗi nhận python socket

Hướng dẫn python socket receive thread - chuỗi nhận python socket

Nội dung chính

  • Giới thiệu về Socket
  • Phân loại Socket
  • Stream Socket
  • Datagram Socket
  • Dựng 1 kết nối TCP Socket với Python
  • Thiết lập Server
  • Mở 1 Server để lắng nghe
  • Giao tiếp với Client
  • Thiết lập Client
  • Chạy thử
  • Kết luận
  • Tài liệu tham khảo

Đã đăng vào thg 5 4, 2020 2:34 SA 9 phút đọc 9 phút đọc

  • Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991.
  • Hiện tại, Python đã trở thành 1 trong các ngôn ngữ phổ biến nhất trên thế giới hiện nay nhờ những ưu điểm mạnh mẽ:
    • Dễ đọc, dễ học và dễ nhớ.
    • Có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình
    • Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu
    • Có thể ứng dụng trong nhiều lĩnh vực như: Web Development, Data Science, Scripting, .....
  • Với những ưu điểm trên, thì tội gì chúng ta không thử tìm hiểu Python nhỉ? Thời gian vừa qua mình cũng đã mày mò tìm hiểu Python, và hôm nay quyết định chia sẻ lên đây 1 chút kiến thức mình học được để mọi người cùng tham khảo.
  • Về cú pháp Python cơ bản, mình xin phép không nhắc lại trên đây. Mọi người có thể tìm hiểu trên W3Schools, rất đầy đủ, có ví dụ minh họa và bài tập cho các bạn thực hành trực tiếp cho từng phần cho các bạn.
  • Để các bạn hiểu được cặn kẽ, mình xin phép chia bài này làm 3 phần.
    • Phần 1 - (Tức là bài viết này): Giới thiệu về Socket, lập trình Socket trong Python.
    • Phần 2: Tìm hiểu về đa luồng trong Python
    • Phần 3: Xây dựng chat tool cơ bản với python sử dụng Socket, đa luồng.
  • Trong phạm vi bài viết này, mình sẽ giới thiệu tới các bạn về Socket, sử dụng Socket để kết nối Client - Server trong Python

Giới thiệu về Socket

  • Socket là điểm cuối end-point trong liên kết truyền thông hai chiều (two-way communication) biểu diễn kết nối giữa Client – Server.
  • Socket được sử dụng để gửi dữ liệu qua lại giữa Client và Server thông qua mạng (network)
  • Mạng (network) có thể là logical, mạng cục bộ tới máy tính hoặc 1 kết nối vật lí tới mạng bên ngoài, với kết nối riêng của chúng tới các mạng khác. Ví dụ điển hình là Internet, cái mà bạn kết nối thông qua ISP (Internet Service Provider)

Phân loại Socket

  • Socket được chia làm 2 loại chính :

    • Stream Socket
    • Datagram Socket

    Stream Socket

  • Dựng 1 kết nối TCP Socket với Python

  • Thiết lập Server

    • Mở 1 Server để lắng nghe
    • Giao tiếp với Client
  • Thiết lập Client

    • Chạy thử
    • Kết luận
  • Tài liệu tham khảo

    Datagram Socket

  • Đã đăng vào thg 5 4, 2020 2:34 SA 9 phút đọc

  • Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991.

    • Hiện tại, Python đã trở thành 1 trong các ngôn ngữ phổ biến nhất trên thế giới hiện nay nhờ những ưu điểm mạnh mẽ:
    • Dễ đọc, dễ học và dễ nhớ.
  • Có hình thức rất sáng sủa, cấu trúc rõ ràng, thuận tiện cho người mới học lập trình

    • Cấu trúc của Python còn cho phép người sử dụng viết mã lệnh với số lần gõ phím tối thiểu
  • Có thể ứng dụng trong nhiều lĩnh vực như: Web Development, Data Science, Scripting, .....

Dựng 1 kết nối TCP Socket với Python

  • Với những ưu điểm trên, thì tội gì chúng ta không thử tìm hiểu Python nhỉ? Thời gian vừa qua mình cũng đã mày mò tìm hiểu Python, và hôm nay quyết định chia sẻ lên đây 1 chút kiến thức mình học được để mọi người cùng tham khảo.
  • Về cú pháp Python cơ bản, mình xin phép không nhắc lại trên đây. Mọi người có thể tìm hiểu trên W3Schools, rất đầy đủ, có ví dụ minh họa và bài tập cho các bạn thực hành trực tiếp cho từng phần cho các bạn.

Thiết lập Server

  • Mở 1 Server để lắng nghe
import socket

HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print('Start listening...')
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)
  • Giao tiếp với Client

Mở 1 Server để lắng nghe

import socket
  • Giao tiếp với Client
HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    print('Start listening...')
  • Thiết lập Client
  • Chạy thử
  • Kết luận
  • Tài liệu tham khảo
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    s.bind((HOST, PORT))
    s.listen()
finally:
    s.close()
  • Đã đăng vào thg 5 4, 2020 2:34 SA 9 phút đọc

  • Python là một ngôn ngữ lập trình bậc cao cho các mục đích lập trình đa năng, do Guido van Rossum tạo ra và lần đầu ra mắt vào năm 1991.
  • Hàm
    import socket
    
    2 có 1 tham số backlock. Nó cho phép bạn chỉ định số lượng kết nối được phép cho server của bạn. Nếu không truyền vào, nó sẽ lấy giá trị backlock mặc định.

Giao tiếp với Client

 conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)
  • Khi có 1 client gửi yêu cầu kết nối đến, hàm accept() chấp thuận kết nối từ Client, cho phép Client gửi dữ liệu đến và xử lí.
  • Hàm
    import socket
    
    3 để Server liên tục xử lí dữ liệu Client gửi tới cho đến khi Client ngắt kết nối.
  • Code trong hàm while là phần xử lí của Server đối với dữ liệu từ Client. Như ở trên, Server sẽ gửi lại bất cứ dữ liệu nào Client gửi tới.

Thiết lập Client

  • Tạo 1 file
    import socket
    
    4 như sau:
import socket

HOST = '127.0.0.1'  # The server's hostname or IP address
PORT = 65432        # 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', repr(data))
  • import socket
    
    5 và PORT ở đây chính là địa chỉ và cổng kết nối với server. Client và Server phải đồng nhất 2 thông số này mới có thể kết nối.
  • Hàm
    import socket
    
    7 gửi yêu cầu kết nối tới Server. Nếu Server chấp thuận, Client sẽ có thể giao tiếp với Server.
  • Ở đây mình gửi đoạn text
    import socket
    
    8, Server sẽ nhận và gửi lại, Client in ra màn hình.

Chạy thử

  • OK giờ là lúc thử nghiệm thành quả.
  • B1: Đầu tiên bạn mở terminal, và chạy file server.py

  • B2: mở thêm 1 tab terminal, chạy file

    import socket
    
    4

  • B3: Xem kết quả

    • Phía Server:

    • Phía Client:

  • Nếu được kết quả như trên tức là bạn đã thành công rồi đó.

Kết luận

  • Vậy là mình đã chia sẻ xong với mọi người kiến thức cơ bản về Socket, và cách để build 1 kết nối TCP Client - Server.
  • Ở phần tiếp theo mình sẽ giới thiệu với các bạn thêm 1 kiến thức khá trừ tượng nhưng là tất yếu để xây dựng 1 tool chat : Đa luồng (Multiple Threads).
  • Link phần tiếp theo tại đây.

Tài liệu tham khảo

  • https://realpython.com/python-sockets/
  • https://toidicode.com/lap-trinh-mang-voi-module-socket-trong-python-364.html
  • https://code.tutsplus.com/vi/tutorials/introduction-to-network-programming-in-python--cms-30459

All rights reserved