Saya menjalankan skrip python yang mendengarkan koneksi masuk ke komputer saya. Saya mendengarkan pada dua port 9999 dan 9998. namun ketika saya memeriksa koneksi ke port pertama saya dengan menggunakan .accept() kemudian menunggu sampai saya memiliki koneksi untuk menjalankan kode di bawah yang berarti port saya yang lain dapat memeriksa koneksi.

Saya ingin dapat memeriksa koneksi secara bersamaan dan menjalankan kode sesuai dengan port apa yang telah terhubung, ini adalah kode saya saat ini.

import socket
import subprocess
import os


while 1 > 0:
# Set connection for C_shutdown script on port 9999
    HOST = '192.168.1.46' 
    PORT = 9999
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind((HOST, PORT))
    server_socket.listen(10)
    print("Listening for Shutdown connection")

# Set connection for Light_on script on port 9998
    HOST = '192.168.1.46' 
    PORT2 = 9998
    light_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    light_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    light_socket.bind((HOST, PORT2))
    light_socket.listen(10)
    print("Listening for Light Connection")

    l = light_socket.accept()
    print("Light script connected")


    s = server_socket.accept()
    print("Shutdown Script Connected")


0
Jackson7272 25 Mei 2020, 01:47

1 menjawab

Jawaban Terbaik

Setiap server harus berjalan di utasnya yang terpisah, seperti ini:

# ... other imports ...
import threading

def server_job():
    # ... Code for server_socket ...
    print("Listening for server connection")
    while True:
        s = server_socket.accept()
        # ... Anything you want to do with s ...

def light_job():
    # ... Code for light_socket ...
    print("Listening for Light Connection")
    while True:
        l = light_socket.accept()
        # ... Anything you want to do with l ...

# Creates Thread instances that will run both server_job and light_job
t_server = threading.Thread(target=server_job)
t_light = threading.Thread(target=light_job)

# Begin their execution
t_server.start()
t_light.start()

# Wait for both threads to finish their execution
t_light.join()
t_server.join()

Di sini setiap utas memiliki while True loop untuk menerima beberapa koneksi, pengikatan dan mendengarkan port harus terjadi hanya sekali.

Opsi lain adalah menelurkan dua proses alih-alih dua utas, tetapi itu tergantung pada kasus penggunaan Anda, misalnya jika Anda tidak perlu berbagi data di antara utas tersebut dan menginginkan solusi untuk GIL. Dalam hal ini, mungkin ingin melihat https://docs.python.org /3/library/multiprocessing.html

0
cmt 25 Mei 2020, 00:43