Làm cách nào để kết nối nhiều ổ cắm trong python?

Lập trình ổ cắm là việc triển khai 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ó 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. Các ứng dụng kết nối Internet cần hoạt động trong thời gian thực sẽ được hưởng lợi rất nhiều từ việc triển khai ổ cắm trong mã mạng của chúng, cho phép gửi và nhận dữ liệu bất kỳ lúc nào

Trong hướng dẫn Python này, bạn sẽ học cách gửi dữ liệu từ các kết nối máy khách đến máy chủ và máy khách đến máy khách bằng lập trình mạng ổ cắm trong Python. Bạn cũng sẽ tìm hiểu cách bạn có thể tận dụng sức mạnh của PubNub để gửi dữ liệu giữa hai hoặc nhiều thiết bị khách để liên lạc ngang hàng bằng cách sử dụng PubNub Python SDK. Mặc dù hướng dẫn này hướng dẫn bạn từng bước trong quy trình này, nhưng bạn có thể xem hướng dẫn bằng video về hướng dẫn này trên YouTube và tìm mã nguồn cho ứng dụng này trong kho lưu trữ GitHub

Cài đặt môi trường

Trong phần này, bạn sẽ cài đặt các công cụ và phần phụ thuộc cần thiết để có thể sử dụng Python socket và PubNub

Tài khoản PubNub

Bạn sẽ cần tạo một tài khoản miễn phí, vì bạn sẽ cần khóa xuất bản/đăng ký để gửi thông tin trên Mạng PubNub. Bạn có thể tìm hiểu cách tạo khóa của mình trong video/hướng dẫn bằng văn bản này

Đảm bảo rằng bạn bật Presence để biết khi nào người dùng trực tuyến và Message Persistence để duy trì thông tin được truyền giữa các máy khách. Sao chép các khóa xuất bản và đăng ký vào một trình soạn thảo văn bản, vì bạn sẽ cần những khóa này sau này

Bạn sẽ cần tải xuống phiên bản mới nhất của ngôn ngữ lập trình Python, trong trường hợp này là 2. 7. x. Tải xuống bản phát hành ổn định mới nhất của Python 2. x từ trang web chính thức. Đảm bảo Python được thêm vào

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\n"]

    conn.close[]
    print 'client disconnected'
3 khi cài đặt

Trình chỉnh sửa mã

Bạn sẽ cần tải xuống và sử dụng trình chỉnh sửa mã yêu thích của mình khi phát triển ứng dụng này. Visual Studio Code được khuyên dùng vì đây là trình chỉnh sửa mã nhẹ, mã nguồn mở và miễn phí, hỗ trợ các ngôn ngữ và khuôn khổ khác nhau. Bạn có thể thêm bất kỳ tiện ích mở rộng phổ biến nào cho Python để trợ giúp với intellisense và gỡ lỗi

Xây dựng và chạy

Bây giờ đã đến lúc bắt đầu xây dựng ứng dụng socket bằng Python. Về bản chất, Python cung cấp lớp socket để nhà phát triển có thể thực hiện lập trình socket Python mà không cần sử dụng API socket. Bắt đầu bằng cách thiết lập máy khách và máy chủ

Máy khách-Máy chủ

Tạo tệp khách hàng. py trong thư mục dự án. Để sử dụng một đối tượng ổ cắm trong chương trình, hãy nhập thư viện

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\n"]

    conn.close[]
    print 'client disconnected'
4 đi kèm với Python. Sau đó, bạn sẽ tạo một đối tượng ổ cắm mới kết nối với một địa chỉ IP đã chỉ định [trong trường hợp này là số cổng của máy chủ cục bộ
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\n"]

    conn.close[]
    print 'client disconnected'
5] để tạo một kết nối mới đến máy chủ ổ cắm [sẽ được tạo ngay trong máy chủ. py]. Sau đó, bạn có thể gửi thông tin đến máy chủ và đóng kết nối ổ cắm máy khách sau khi hoàn tất

mở máy khách. py trong Visual Studio Code và thêm mã sau hoạt động chính xác như được mô tả trước đó

import socket

client = socket.socket[socket.AF_INET, socket.SOCK_STREAM]
client.connect[['0.0.0.0', 8080]]

client.send["I am CLIENT\n"]

from_server = client.recv[4096]

client.close[]

print from_server

Bạn sẽ cần thiết lập máy chủ để lắng nghe mọi kết nối và thông tin đến từ máy khách. Tạo máy chủ tập tin. py trong thư mục dự án. Thêm đoạn mã sau vào tập tin

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\n"]

    conn.close[]
    print 'client disconnected'

Máy chủ liên kết đối tượng ổ cắm với cổng

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\n"]

    conn.close[]
    print 'client disconnected'
5 của localhost làm máy chủ ổ cắm để máy khách kết nối. 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ẽ chấp nhận kết nối nếu có kết nối hợp lệ và lưu trữ dữ liệu. Nếu máy chủ nhận đúng thông tin từ máy khách, nó sẽ gửi một chuỗi xác nhận lại cho máy khách

Để tự kiểm tra điều này, hãy mở hai cửa sổ đầu cuối cùng một lúc, vì bạn sẽ cần chạy các tệp python bằng lệnh

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\n"]

    conn.close[]
    print 'client disconnected'
7, thay thế
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\n"]

    conn.close[]
    print 'client disconnected'
0 bằng tên của các tệp. Chạy chương trình máy chủ máy chủ. py trong một cửa sổ đầu cuối và sau đó chạy ứng dụng khách chương trình khách. tập tin py trong khác. Chương trình phía máy khách sẽ gửi chuỗi "I am CLIENT" đến máy chủ hiện đang chờ trả lời. Chương trình phía máy chủ sẽ xử lý, lưu trữ và gửi lại phản hồi cho máy khách

khách hàng đến khách hàng

Mặc dù chức năng cơ bản của việc gửi dữ liệu từ máy khách đến máy chủ đang hoạt động bình thường, nhưng việc gửi dữ liệu giữa hai hoặc nhiều thiết bị qua Internet rất phức tạp. 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à bạn đã triển khai sẽ không đáng tin cậy 100% để gửi dữ liệu ngang hàng trong ứng dụng, vì máy chủ cần phải chạy liên tục để nhận được thông tin

Đây là nơi PubNub xuất hiện. PubNub là nền tảng API dành cho nhà phát triển cung cấp năng lượng cho cơ sở hạ tầng thời gian thực trong ứng dụng để xây dựng Không gian ảo hấp dẫn, nơi các cộng đồng trực tuyến có thể thực sự kết nối. Với Một đối nhiều, Một đối một hoặc Nhiều đối nhiều, PubNub tự động chia tỷ lệ để hỗ trợ mọi tải ứng dụng. Việc sử dụng API dữ liệu thời gian thực của PubNub 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 xuất bản/đăng ký. Điều này hoàn thành các mục tiêu giống như kết nối ổ cắm mà không cần tự quản lý cơ sở hạ tầng

Để tích hợp PubNub vào dự án, hãy cài đặt gói PubNub với

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\n"]

    conn.close[]
    print 'client disconnected'
1 trong thiết bị đầu cuối. Điều này sẽ cho phép bạn sử dụng PubNub Python SDK và giao tiếp trên mạng PubNub

pip install 'pubnub>=7.0.2'

Vì bạn đã có khóa API PubNub, nên bạn sẽ triển khai hai ứng dụng khách riêng biệt chạy trên mạng PubNub. Tạo tệp pn_client_1. py và thêm đoạn mã sau. Thay thế khóa xuất bản và đăng ký của bạn trong phần

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\n"]

    conn.close[]
    print 'client disconnected'
2 và
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\n"]

    conn.close[]
    print 'client disconnected'
3

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 = 'enter your pubnub publish key here'
pnconfig.subscribe_key = 'enter 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]

Tạo tệp pn_client_2. py và thêm đoạn mã sau. Thay thế các khóa xuất bản và đăng ký của bạn trong các trường

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\n"]

    conn.close[]
    print 'client disconnected'
2 và
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\n"]

    conn.close[]
    print 'client disconnected'
3

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\n"]

    conn.close[]
    print 'client disconnected'
0

Như đã được thực hiện trước đó cho kết nối máy khách đến máy chủ, hãy mở hai cửa sổ đầu cuối cùng một lúc, vì bạn sẽ cần chạy tệp pn_client python bằng lệnh

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\n"]

    conn.close[]
    print 'client disconnected'
7, thay thế
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\n"]

    conn.close[]
    print 'client disconnected'
0 bằng tệp pn_client python. Mỗi tệp đại diện cho một máy khách có thể giao tiếp với nhau bằng cách gửi tin nhắn văn bản trong thiết bị đầu cuối

Mỗi máy khách khởi tạo kết nối của nó với mạng PubNub bằng các khóa xuất bản và đăng ký, đồng thời kết nối với kênh

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\n"]

    conn.close[]
    print 'client disconnected'
8. Bạn có thể coi đây là việc gửi dữ liệu qua ổ cắm máy chủ TCP trong Python. Bất cứ khi nào một máy khách gửi tin nhắn, máy khách kia sẽ lắng nghe bằng cách sử dụng trình xử lý sự kiện để xử lý thông tin và hiển thị tin nhắn trong thiết bị đầu cuối của riêng họ

Cái gì tiếp theo

Xin chúc mừng, bạn đã học cách thiết lập kết nối ổ cắm máy khách đến máy chủ cơ bản trong Python, cũng như sử dụng PubNub để làm cơ sở hạ tầng cung cấp năng lượng cho kết nối giao tiếp giữa máy khách với máy khách

Bạn có thể xem video hướng dẫn này trên YouTube và xem phiên bản hoàn chỉnh của ứng dụng trên GitHub. Nếu bạn muốn tìm hiểu thêm về cách cung cấp năng lượng cho các ứng dụng của mình bằng PubNub, hãy nhớ xem các tài nguyên dành cho nhà phát triển khác của PubNub

Máy khách có thể kết nối với nhiều ổ cắm không?

Bất kể giao thức có trạng thái hay không trạng thái, hai máy khách có thể kết nối với cùng một cổng máy chủ bởi vì đối với mỗi máy khách, chúng tôi có thể chỉ định một ổ cắm khác nhau [như . Cùng một máy khách cũng có thể có hai ổ cắm kết nối với cùng một cổng máy chủ - vì các ổ cắm đó khác nhau bởi SRC-PORT.

Làm cách nào để kết nối hai máy tính bằng lập trình ổ cắm trong python?

Các bước này liên quan đến việc sử dụng ổ cắm để kết nối hai máy tính bằng lập trình ổ cắm trong python. .
Bước 1] Tạo một Socket. .
Bước 2] Xác định Ổ cắm. .
Bước 3] Kết nối với Máy chủ từ Máy khách. .
Bước 4] Chấp nhận kết nối trên máy chủ. .
Bước 5] Giao tiếp. .
Bước 6] Đóng kết nối

Làm cách nào để tạo kết nối TCP trong python?

Nó bắt đầu bằng cách 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

Chủ Đề