首页 > 解决方案 > 如何使用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

标签: pythonsocketsnetwork-programmingpython-3.7

解决方案


推荐阅读