Pythonは、単一のソケットを使用して情報を同時に送受信します

1つ目は、ソケットやマルチスレッドに必要なコンテンツを含む必要なモジュールをインポートすることです。時間は、情報の送信間隔を制御するために使用されます。

import time
import socket
import threading

1.情報を送信するブロードキャストスレッド

ここでは、さまざまなアドレスをシミュレートするために複数のポートが使用され、送信する必要のあるすべてのポートアドレスがポートに格納されます。
注:ポートはパラメータに書き込まれません。実際の使用では、クラスのパラメータまたはポートが書き込まれます。特定のニーズに応じてグローバル変数から取得されます。

# 广播线程
class broadcast(threading.Thread):
	def __init__(self, threadID, name, interval, soc):
		threading.Thread.__init__(self)
		self.threadID = threadID
		self.name = name
		self.interval = interval
		self.soc = soc
	def run(self):
		while True:
			# 使用自定义的create_msg()方法创建要发送的文本信息
			msg = create_msg()
			msg = msg.encode(encoding='UTF-8')
			# 对所有port都进行一次发送
			for port in ports:
				self.soc.sendto(msg, ("127.0.0.1", port))
			# interval为每次发送给所有端口之后间隔的时间
			time.sleep(self.interval)

2.情報を受け取る処理スレッド

# 接收线程		
class recieve(threading.Thread):
	def __init__(self, threadID, name, soc):
		threading.Thread.__init__(self)
		self.threadID = threadID
		self.name = name
		self.soc = soc
	def run(self):
		while True:
			msg = ""
			addr = ""
			try:
				data, addr = self.soc.recvfrom(2048)
				msg = data.decode(encoding='UTF-8')
			except:
				pass
			# 利用自定义的deal_msg()方法处理接收的文本信息
			result = deal_msg(msg)
			# 可以根据获取的result在后面继续做一些其它操作

3.スレッドを作成します

# 此处配置为UDP协议,根据具体需要调整
soc = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# run_port为当前socket运行的端口
soc.bind(("127.0.0.1", run_port))
# 创建发送线程,每轮发送间隔一秒
UPDATE_INTERVAL = 1
thread_broadcast = broadcast(1, "broadcast", UPDATE_INTERVAL, soc)
# 创建接收线程
thread_recieve = recieve(2, "recieve", soc)

4.スレッドを開始します

# 启动线程
thread_broadcast.start()
thread_recieve.start()

コンテンツの計算など、特定のニーズに応じて他のスレッドを追加することもできます。

おすすめ

転載: blog.csdn.net/starvapour/article/details/108416351