簡體   English   中英

Python UDP 通訊使用Socket,檢查收到的數據

[英]Python UDP communication using Socket, check data received

我對 Python 很陌生,試圖編寫一個代碼來從 UDP 連接接收字符串,我現在遇到的問題是我需要從 2 個來源接收數據,如果沒有來自任何一個來源的數據,我希望程序繼續循環或者兩者都有,但是現在如果源2沒有數據,它會停在那里等待數據,如何解決? 我正在考慮使用 if 語句,但我不知道如何檢查傳入的數據是否為空,任何想法將不勝感激!

import socket

UDP_IP1 = socket.gethostname()
UDP_PORT1 = 48901
UDP_IP2 = socket.gethostname()
UDP_PORT2 = 48902

sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock1.bind((UDP_IP1, UDP_PORT1))
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock2.bind((UDP_IP2, UDP_PORT2))

while True:
    if sock1.recv != None:
        data1, addr = sock1.recvfrom(1024)
        data1_int = int(data1)
        print "SensorTag[1] RSSI:", data1_int

    if sock2.recv != None:
        data2, addr = sock2.recvfrom(1024)
        data2_int = int(data2)
        print "SensorTag[2] RSSI:", data2_int

如果select不適合您,您可以隨時將它們扔到一個線程中。 您只需要小心共享數據並在它們周圍放置良好的互斥鎖。 請參閱threading.Lock以獲得幫助。

import socket
import threading
import time

UDP_IP1 = socket.gethostname()
UDP_PORT1 = 48901
UDP_IP2 = socket.gethostname()
UDP_PORT2 = 48902

sock1 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock1.bind((UDP_IP1, UDP_PORT1))
sock2 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock2.bind((UDP_IP2, UDP_PORT2))

def monitor_socket(name, sock):
    while True:
        sock.recv is not None:
            data, addr = sock.recvfrom(1024)
            data_int = int(data)
            print(name, data_int)
    
t1 = threading.Thread(target=monitor_socket, args=["SensorTag[1] RSSI:", sock1
t1.daemon = True
t1.start()
    
t2 = threading.Thread(target=monitor_socket, args=["SensorTag[2] RSSI:", sock2])
t2.daemon = True
t2.start()
    
while True:
    #  We don't want to while 1 the entire time we're waiting on other threads
    time.sleep(1)

請注意,由於沒有運行兩個 UPD 源,因此未對此進行測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM