python - 如何使用python中的套接字连接4个设备进行双向通信
问题描述
我正在 4 个设备(A、B、C 和 D)之间建立连接,以便所有设备都可以使用套接字相互发送消息。
我尝试过使用客户端/服务器的想法。我将设备 A 设为客户端,因为它将启动连接并使其他设备同时成为服务器和客户端(以便他们可以来回发送消息)。我觉得 B、C 和 D 的代码应该是相似的,因为它们基本上做同样的事情。我在 A&B 之间使用相同的端口,在 B&C 之间使用另一个端口...我可以将消息 A 发送到 B,然后将 B 发送到 c,然后将 C 发送到 D,但不能反向发送消息
Device A code
*************
import socket
import time
host = socket.gethostname()
port = 8088
s = socket.socket()
s.connect((host, port))
print('Calling...')
time.sleep(2)
ms1_message = input(str('A_State>>'))
while A_message != str('bye'):
s.send(A_message.encode())
B_message = s.recv(30)
B_message = B_message.decode()
print('B sends:>> ', B_message)
Device B code
********
import socket
import time
import sys
from _thread import *
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = socket.gethostname()
port = 8088
try:
s.bind((host, port))
except socket.error:
print('Binding Failed!!!')
sys.exit()
s.listen(4)
print('Listening for connections...')
A, addr = s.accept()
print('A connected')
while True:
recv_message_ms1 = A.recv(30)
if not recv_message_A:
break
print('A sends:>> ', recv_message_A.decode())
message = 'ACK'
message = message.encode()
A.send(message)
time.sleep(3)
print('Searching for C...')
# connection setup to C
s2 = socket.socket()
port2 = 8089
C = socket.gethostname()
s2.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s2.connect((C, port2))
print('...Connected with C')
B_message = 'Channel Setup Request...'.encode()
# B_message = B_message.encode()
s2.send(B_message)
我期待这样的结果,例如 A 向 B 发送消息,B 确认消息并向 A 发送 ACK,B 向 C 发送另一条消息,C 发送回 ACK 并向 D 发送消息,D 发送回 ACK 并发生反向消息。谁能指导我该怎么做?注意:仅限 Python
解决方案
推荐阅读
- python - 为什么全局变量在开始时没有更新,但在按下按钮时更新了?
- python - 在python中的dicts列表中交换键
- typescript - 如何制作反应变量,例如 Vue 中的 data()?Vue+打字稿
- r - 如何在R中的循环中创建子列表
- javascript - 单击单元格时检查单选按钮并更改单元格的背景
- python - Matplotlib:将渐变颜色图与列出的颜色图相结合
- python - 我需要在 SVM 的预测时间计算 hist 吗?
- reactjs - Webpack 解决 lodash 和其他模块的错误
- python - 仅返回分配了外键的对象的查询集。Django
- docker - 如何在 Docker 中保留中间容器?