Как подключить 4 устройства для двунаправленной связи с использованием сокетов в Python - PullRequest
1 голос
/ 13 октября 2019

Я устанавливаю соединение между 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)

Я ожидаю такой результат, как отправка сообщения B на B, B подтверждение сообщения с помощью и ACK обратно на A, и B отправка еще одного сообщения на C, C отправка обратно ACK и отправка сообщений на D, D отправка обратно ACK и происходят обратные сообщения,кто-нибудь может подсказать мне, что делать? NB: только Python

...