Ổ cắm TCP Python

Hướng dẫn này hướng dẫn cách bạn có thể gửi dữ liệu từ thiết bị đến thiết bị, máy khách đến máy chủ và ngược lại bằng cách sử dụng lập trình ổ cắm trong Python

Thêm một người học trực quan?

Sẵn sàng để xây dựng?

Lập trình socket trong Python là gì?

Ổ cắm (hay còn gọi là lập trình ổ cắm) là một chương trình cho phép hai ổ cắm gửi và nhận dữ liệu hai chiều tại bất kỳ thời điểm nào

Nó hoạt động bằng cách kết nối hai ổ cắm (hoặc nút) với nhau và cho phép chúng giao tiếp trong thời gian thực và là một tùy chọn tuyệt vời để xây dựng vô số ứng dụng

Tại sao nên sử dụng lập trình socket trong Python để kết nối và gửi dữ liệu?

Các ứng dụng kết nối Internet cần hoạt động trong thời gian thực được hưởng lợi rất nhiều từ việc triển khai các ổ cắm trong mã mạng của chúng. Một số ví dụ về các ứng dụng sử dụng lập trình socket là

Python, không giống như JavaScript, là ngôn ngữ thực thi đồng bộ. Đây là lý do tại sao asyncio được phát triển – để làm cho Python mạnh mẽ hơn, đặc biệt là đối với bản chất của lập trình socket

Với streaming sockets trong python, dữ liệu có thể được gửi hoặc nhận bất cứ lúc nào. Trong trường hợp chương trình Python của bạn đang thực thi một số đoạn mã, các luồng khác có thể xử lý dữ liệu ổ cắm mới. Các thư viện Python như asyncio triển khai nhiều luồng, vì vậy chương trình Python của bạn có thể hoạt động theo kiểu không đồng bộ

Hướng dẫn lập trình Socket trong Python

Về bản chất, Python cung cấp một lớp ổ cắm để các nhà phát triển có thể dễ dàng triển khai các đối tượng ổ cắm trong mã nguồn của họ. Chúng ta có thể bắt đầu triển khai socket trong chương trình của mình bằng ba bước đơn giản

  1. Nhập thư viện ổ cắm

    Để sử dụng một đối tượng ổ cắm trong chương trình của bạn, hãy bắt đầu bằng cách nhập thư viện ổ cắm. Không cần cài đặt nó với trình quản lý gói, nó đi kèm với Python

  2. import socket
  3. Xây dựng các đối tượng ổ cắm

    Bây giờ chúng ta có thể tạo các đối tượng ổ cắm trong mã của mình

  4. sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    Mã này tạo một đối tượng ổ cắm mà chúng ta đang lưu trữ trong biến “sock”. Hàm tạo được cung cấp một tham số họ và loại tương ứng. Tham số gia đình được đặt thành giá trị mặc định, đó là Định dạng địa chỉ Internet

    Tham số loại được đặt thành Luồng ổ cắm, cũng là mặc định cho phép "luồng byte theo trình tự, đáng tin cậy, hai chiều, dựa trên kết nối" qua TCP1

  5. Mở và đóng kết nối

    Khi chúng ta có một đối tượng ổ cắm được khởi tạo, chúng ta có thể sử dụng một số phương thức để mở kết nối, gửi dữ liệu, nhận dữ liệu và cuối cùng là đóng kết nối

## Connect to an IP with Port, could be a URL
sock.connect(('0.0.0.0', 8080))
## Send some data, this method can be called multiple times
sock.send("Twenty-five bytes to send")
## Receive up to 4096 bytes from a peer
sock.recv(4096)
## Close the socket connection, no more data transmission
sock.close()

Ví dụ về ổ cắm Python của Máy chủ khách

Bây giờ chúng ta đã biết một vài phương thức để truyền byte, hãy tạo một chương trình máy khách và máy chủ bằng Python

import socket
serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serv.bind(('0.0.0.0', 8080))
serv.listen(5)
while True:
    conn, addr = serv.accept()
    from_client = ''
    while True:
        data = conn.recv(4096)
        if not data: break
        from_client += data
        print from_client
        conn.send("I am SERVER
") conn.close() print 'client disconnected'

Làm thế nào nó hoạt động?

Mã này tạo một đối tượng ổ cắm và liên kết nó với cổng 8080 của máy chủ cục bộ dưới dạng máy chủ ổ cắm. Khi máy khách kết nối với địa chỉ này bằng kết nối ổ cắm, máy chủ sẽ lắng nghe dữ liệu và lưu trữ dữ liệu đó trong biến "dữ liệu"

Sau đó, chương trình ghi lại dữ liệu máy khách bằng cách sử dụng “in”, rồi gửi một chuỗi đến máy khách. Tôi là MÁY CHỦ

Ổ cắm TCP Python

Chúng ta hãy xem mã máy khách sẽ tương tác với chương trình máy chủ này

Máy khách ổ cắm Python

Đây là mã demo ổ cắm máy khách

import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('0.0.0.0', 8080))
client.send("I am CLIENT
") from_server = client.recv(4096) client.close() print from_server

Làm thế nào nó hoạt động?

Máy khách này mở kết nối ổ cắm với máy chủ, nhưng chỉ khi chương trình máy chủ hiện đang chạy. Để tự kiểm tra điều này, bạn sẽ cần sử dụng 2 cửa sổ đầu cuối cùng một lúc

Tiếp theo, máy khách gửi một số dữ liệu đến máy chủ. tôi là KHÁCH HÀNG

Sau đó, máy khách nhận được một số dữ liệu mà nó dự đoán từ máy chủ

Xong. Giờ đây, bạn có thể bắt đầu truyền dữ liệu giữa máy khách và máy chủ bằng cách sử dụng một số chương trình mạng Python cơ bản

Làm thế nào để bạn gửi dữ liệu giữa các khách hàng?

Gửi dữ liệu giữa 2 hoặc nhiều thiết bị khách qua internet rất khó. Do các biện pháp bảo vệ được triển khai bởi an ninh mạng, không phải tất cả các thiết bị được kết nối với web trên toàn thế giới đều có địa chỉ giao thức internet (IP) có thể truy cập công khai

Điều này có nghĩa là mã Python mà chúng tôi triển khai sẽ không đáng tin cậy 100% để gửi dữ liệu ngang hàng trong ứng dụng thời gian thực của chúng tôi

Vì vậy, làm cách nào để đạt được độ tin cậy và tốc độ khi truyền dữ liệu ngang hàng?

Điều này có thể được thực hiện bằng cách sử dụng một máy chủ ở giữa

  • Các thiết bị khách sử dụng internet có thể kết nối với máy chủ có địa chỉ IP công cộng (hoặc tên miền trang web)
  • Sau đó, nhà môi giới ở giữa này có thể chuyển các tin nhắn được định tuyến tới 1 hoặc nhiều khách hàng
Ổ cắm TCP Python

PubNub làm điều này tốt nhất với API Pub/Sub. Nó nhanh, đáng tin cậy, an toàn và dễ thực hiện trên mọi thiết bị khách

Cho dù bạn có máy chủ Python, trang web JavaScript hay bất kỳ thứ gì ở giữa, bạn có thể sử dụng PubNub để gửi dữ liệu cho bất kỳ ai trong vòng dưới 250 mili giây

Với One-to-Many, One-to-One hoặc Many-to-Many, PubNub tự động chia tỷ lệ để hỗ trợ mọi tải ứng dụng. Việc sử dụng API sẽ mở ra kết nối tức thì, luôn bật giữa tất cả các máy khách có khóa API Pub/Sub. Điều này hoàn thành các mục tiêu giống như kết nối ổ cắm

Ổ cắm PubNub và Python có kết nối SSL

Đây là một ví dụ về ổ cắm python của dữ liệu ngang hàng được gửi bằng PubNub, trên một kênh duy nhất, với SSL. Bạn có thể nghĩ điều này giống như gửi dữ liệu qua ổ cắm máy chủ TCP trong python

Khi đăng ký tài khoản PubNub miễn phí, bạn có thể sử dụng vô số kênh thực tế để gửi tin nhắn trong thời gian thực. Trước khi thử mã, hãy nhớ tạo một tài khoản PubNub miễn phí

khách hàng 1

from pubnub.callbacks import SubscribeCallback
from pubnub.enums import PNStatusCategory
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub
import time
import os
pnconfig = PNConfiguration()
pnconfig.publish_key = 'your pubnub publish key here'
pnconfig.subscribe_key = 'your pubnub subscribe key here'
pnconfig.ssl = True
pubnub = PubNub(pnconfig)
def my_publish_callback(envelope, status):
    # Check whether request successfully completed or not
    if not status.is_error():
        pass
class MySubscribeCallback(SubscribeCallback):
    def presence(self, pubnub, presence):
        pass
    def status(self, pubnub, status):
        pass
    def message(self, pubnub, message):
        print "from device 2: " + message.message
pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels("chan-1").execute()
## publish a message
while True:
    msg = raw_input("Input a message to publish: ")
    if msg == 'exit': os._exit(1)
    pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)

khách hàng 2

Có thể nhập chuỗi trên dòng lệnh cho 2 chương trình khách này. Kích thước thư tối đa để xuất bản PubNub là 32kb. Sử dụng 2 cửa sổ đầu cuối để thử mã

from pubnub.callbacks import SubscribeCallback
from pubnub.enums import PNStatusCategory
from pubnub.pnconfiguration import PNConfiguration
from pubnub.pubnub import PubNub
import time
import os
pnconfig = PNConfiguration()
pnconfig.publish_key = 'your pubnub publish key here'
pnconfig.subscribe_key = 'your pubnub subscribe key here'
pnconfig.ssl = True
pubnub = PubNub(pnconfig)
def my_publish_callback(envelope, status):
    # Check whether request successfully completed or not
    if not status.is_error():
        pass
class MySubscribeCallback(SubscribeCallback):
    def presence(self, pubnub, presence):
        pass
    def status(self, pubnub, status):
        pass
    def message(self, pubnub, message):
        print "from device 1: " + message.message
pubnub.add_listener(MySubscribeCallback())
pubnub.subscribe().channels("chan-1").execute()
## publish a message
while True:
    msg = raw_input("Input a message to publish: ")
    if msg == 'exit': os._exit(1)
    pubnub.publish().channel("chan-1").message(str(msg)).pn_async(my_publish_callback)

Kết thúc lập trình socket bằng Python

Tất cả mã trong bài đăng này được lưu trữ trên GitHub trong kho lưu trữ Python Socket Demo, nếu bạn muốn có tất cả ở một nơi

Chúng tôi hy vọng bạn thích sử dụng hướng dẫn lập trình socket của chúng tôi. Hy vọng rằng bạn có thể sử dụng nó để xây dựng một cái gì đó tuyệt vời. Đó có thể là một hệ thống an ninh nhà thông minh tuyệt vời hoặc một ứng dụng trò chuyện thời gian thực. Khả năng là vô tận. Hãy cho chúng tôi biết những gì bạn tạo ra

PubNub hoàn toàn miễn phí tới 1 triệu tin nhắn mỗi tháng. Để biết thêm các khả năng của API, hãy xem tài liệu SDK PubNub Python v4 hoặc bất kỳ SDK nào trong số hơn 75 SDK máy khách PubNub khác

Ổ cắm TCP trong Python là gì?

Các đối số được truyền cho socket() là các hằng số được sử dụng để chỉ định họ địa chỉ và loại ổ cắm. AF_INET là họ địa chỉ Internet cho IPv4. SOCK_STREAM là loại ổ cắm cho TCP, giao thức sẽ được sử dụng để vận chuyển thư trong mạng .

Làm cách nào để tạo Python socket TCP?

Để tạo socket, có một hàm gọi là socket. Nó chấp nhận các đối số family , type và proto (xem tài liệu để biết chi tiết). Để tạo TCP-socket, bạn nên sử dụng socket. AF_INET hoặc ổ cắm. .
trói buộc()
nghe()
Chấp nhận()
liên kết()
gửi()
recv()

Làm cách nào để kết nối với cổng TCP bằng Python?

Nó bắt đầu bằng việc tạo một ổ cắm TCP/IP. .
import socket import sys # Tạo socket TCP/IP sock = socket. ổ cắm (ổ cắm. .
# Liên kết ổ cắm với cổng server_address = ('localhost', 10000) print >>sys. stderr, 'khởi động trên %s cổng %s' % server_address sock. .
# Nghe các kết nối đến sock

Ổ cắm có sử dụng TCP hoặc UDP Python không?

Đối số thứ hai xác định loại ổ cắm; . socket. SOCK_DGRAM là ổ cắm UDP. SOCK_STREAM là ổ cắm TCP . Tất cả điều này miễn là bạn đang sử dụng họ ổ cắm AF_INET hoặc AF_INET6.