Как отправить и получить сообщение от клиента клиенту с python (сокет)? - PullRequest
1 голос
/ 03 апреля 2019

мы работаем над проектом «ByZantine Generals Problem» с python (сокет), нам удается создать успешное соединение между сервером и двумя клиентами (client1, client2).Но мы не знали, как создать соединение между двумя клиентами, какая-нибудь помощь?

Проблема проекта модели ссылок: https://upload.wikimedia.org/wikipedia/commons/thumb/8/81/4generalestenientetraidor.svg/400px-4generalestenientetraidor.svg.png

Server.py

import socket


host = '192.168.43.209'  # Standard loopback interface address 
(localhost)
port = 65432        # Port to listen on (non-privileged ports are > 1023)

serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

serv.bind((host, port))
serv.listen(5)

while True:
    conn, addr = serv.accept()
    conn.send(b"Attack ")
    data = conn.recv(4096)
    if not data: break
    print (data)

client1.py

import socket

host = '192.168.43.209'  # Standard loopback interface address         
(localhost)
port = 65432        # Port to listen on (non-privileged ports are > 1023)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))



from_server = client.recv(4096)
print (from_server)
client.send(b"I am client 1 :  ")

client2.py

import socket

host = '192.168.43.209'  # Standard loopback interface address 
(localhost)
port = 65432        # Port to listen on (non-privileged ports are > 1023)
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((host, port))



from_server = client.recv(4096)
print (from_server)
client.send(b"I am client 2 :  ")

1 Ответ

0 голосов
/ 03 апреля 2019

Вы можете установить связь между клиентами через сервер с помощью чего-то подобного.Примечание. В настоящее время это не проверяется, потому что я не на компьютере, на котором я могу запустить это:

Суть этого кода взята из этого ответа, который объясняет, как отправить сообщение ВСЕМ клиентам: https://stackoverflow.com/a/27139338/8150685

Я использовал list для clients, но вам может быть проще использовать dictionary.

clients = [] # The clients we have connected to
clients_lock = threading.Lock()

def listener(client, address):
    print "Accepted connection from: ", address
    with clients_lock:
        clients.append(client) # Add a client to our list
    try:    
        while True:
            data = client.recv(1024)
            if not data:
                break
            else:
                print repr(data)
                # Here you need to read your data
                # and figure out who you want to send it to
                client_to_send_to = 1 # Send this data to client 1
                with clients_lock:
                    if client_to_send_to < len(clients):
                        clients[client_to_send_to].sendall(data)
    finally:
        with clients_lock:
            clients.remove(client)
            client.close()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...