Lập trình mạng với python

Keras được sử dụng bởi CERN, NASA, NIH và nhiều tổ chức khoa học khác trên thế giới (và vâng, Keras được sử dụng tại LHC). Keras có tính linh hoạt cấp thấp để thực hiện các ý tưởng nghiên cứu tùy ý trong khi cung cấp các tính năng tiện lợi cấp cao tùy chọn để tăng tốc chu kỳ thử nghiệm

Trang web này được hỗ trợ rộng rãi bởi DataCamp. DataCamp cung cấp Hướng dẫn Python tương tác trực tuyến cho Khoa học dữ liệu. Tham gia cùng 575.000 người học khác và bắt đầu học Python cho khoa học dữ liệu ngay hôm nay

Chào mừng đến với LearnPython. hướng dẫn Python tương tác org

Cho dù bạn có phải là một lập trình viên có kinh nghiệm hay không, trang web này dành cho tất cả những ai muốn học ngôn ngữ lập trình Python

Bạn được hoan nghênh tham gia nhóm của chúng tôi trên Facebook để đặt câu hỏi, thảo luận và cập nhật

Sau khi bạn hoàn thành các hướng dẫn, bạn có thể được chứng nhận tại LearnX và thêm chứng nhận của bạn vào hồ sơ LinkedIn của bạn

Bài viết giới thiệu căn bản về lập trình socket mà cụ thể là lập trình socket sử dụng TCP/IP bằng ngôn ngữ Python

1. Ổ cắm là gì?

Một ổ cắm là điểm cuối của một liên kết giữa hai ứng dụng. Socket cho phép giao tiếp trong 1 tiến trình, giữa các tiến trình trên cùng 1 máy hoặc giữa nhiều máy với nhau

Trong hệ thống mạng có rất nhiều ứng dụng bao gồm chương trình khách và chương trình chủ ở 2 hệ thống cuối cùng khác nhau. Sau khi được kích hoạt, một tiến trình khách và chủ được tạo và đích của socket được sử dụng là để giúp 2 tiến trình này có thể truyền thông với nhau một cách dễ dàng

Ổ cắm được chia chủ yếu thành 2 loại

  • Ổ cắm luồng. based on giao thức TCP, chỉ thực hiện trên 2 tiến trình đã thiết lập kết nối. Giao thức này đảm bảo dữ liệu truyền đến nơi nhận 1 cách tin cậy và đúng tuần tự. Còn được gọi là hướng kết nối ổ cắm
  • ổ cắm datagram. based on UDP giao thức, không yêu cầu thiết lập kết nối. Giao thức này không chắc chắn dữ liệu truyền đến nơi nhận 1 cách tin cậy và toàn vẹn. Còn được gọi là hướng ổ cắm không kết nối

*Trong phạm vi bài viết này mình chỉ để cập nhật trình cắm sử dụng TCP/IP (Stream socket)

Lập trình mạng với python

2. Lập trình ổ cắm với TCP/IP

Các process muốn truyền thông với nhau thì sẽ gửi message message qua các socket. Ổ cắm là cánh cửa của ứng dụng tiến trình và vận chuyển tầng giao thức (ở đây là TCP)

Để có thể tương tác với nhau và máy chủ có thể nhận liên lạc từ máy khách thì máy chủ phải luôn sẵn sàng. Điều này có 2 ý nghĩa, thứ nhất, giống như trường hợp của UDP, tiến trình của máy chủ phải được chạy trước khi máy khách khởi động liên lạc đến. Thứ hai, chương trình chủ phải tạo ra 1 ổ cắm để sẵn sàng tiếp nhận kết nối từ tiến trình khách

Khi tiến trình máy chủ đã chạy, lúc này tiến trình khách sẽ tạo ra 1 socket TCP để có thể kết nối với máy chủ. Trong khi máy khách đang tạo ổ cắm TCP, nó sẽ mô tả địa chỉ IP, số cổng của tiến trình chủ

Khi ổ cắm của tiến trình khách vừa được tạo, TCP trên máy khách sẽ tiến hành thực hiện quá trình bắt tay 3 bước và thiết lập kết nối TCP tới máy chủ

Trong quá trình bắt tay 3 bước, khi tiến trình chủ nhận thấy tiến trình khách, nó sẽ tự tạo ra 1 ổ cắm mới chỉ dành riêng cho tiến trình khách đó. Khi máy khách nhập vào cửa, chương trình kích hoạt với phương thức accept(). Cuối cùng quá trình bắt tay 3 bước, một kết nối TCP tồn tại giữa ổ cắm của máy khách và ổ cắm của máy chủ

Lập trình mạng với python

3. Ổ cắm mô-đun trong Python

Python cung cấp module socket giúp chúng ta dễ dàng thực hiện kết nối client server để giao tiếp với nhau

To could be used before the first ta must import module socket to program

import socket

Tạo một ổ cắm

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

với

  • tham số đầu tiên là Dòng địa chỉ. connection type setting. Python support 3 format
    • AF_INET. IPv4
    • AF_INET6. IPv6
    • AF_UNIX
  • tham số thứ hai là Loại ổ cắm. cách thiết lập giao thức
    • SOCK_STREAM. TCP
    • SOCK_DGRAM. UDP

Một số phương thức được sử dụng trong chương trình

Đăng ký tên cho socket, ràng buộc địa chỉ vào socket

s. lắng nghe(2)

Cho socket đang lắng nghe tối đa 2 kết nối

ứng dụng khách, addr = s. Chấp nhận()

Khi khách hàng nhập vào cửa, máy chủ chấp nhận kết nối và 1 ổ cắm mới được tạo ra. Máy khách và máy chủ hiện đã có thể truyền và nhận dữ liệu với nhau Nhận gói dữ liệu

str_data = dữ liệu. giải mã ("utf8")

Phân vùng dữ liệu gói vừa nhận

s. sendall(byte(tin nhắn, "utf8"))

Gửi dữ liệu thông qua giao thức TCP. close() That's a connection

4. demo chương trình

Người phục vụ

import socket

HOST = '127.0.0.1'  
PORT = 8000        

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(2)

while True:
    client, addr = s.accept()
    
    try:
        print('Connected by', addr)
        while True:
            data = client.recv(1024)
            str_data = data.decode("utf8")
            if str_data == "quit":
                break
            """if not data:
                break
            """
            print("Client: " + str_data)

            msg = input("Server: ")
                
    finally:
        client.close()

s.close()

Khách hàng

import socket

HOST = '127.0.0.1'  
PORT = 8000        

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = (HOST, PORT)
print('connecting to %s port ' + str(server_address))
s.connect(server_address)

try:
    while True:
        msg = input('Client: ')
        s.sendall(bytes(msg, "utf8"))

        if msg == "quit":
            break

        data = s.recv(1024)
        print('Server: ', data.decode("utf8"))
finally:
    s.close()

Lời kết

Mình học môn mạng máy tính và mong mọi người góp ý với mình ở phần comment nha. Cảm ơn mọi người đã xem