gpt4 book ai didi

python - 使用Socket进行Python UDP通信,检查收到的数据

转载 作者:行者123 更新时间:2023-12-03 11:59:46 24 4
gpt4 key购买 nike

我是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源,因此未进行测试。

关于python - 使用Socket进行Python UDP通信,检查收到的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39585724/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com