如何使用python(套接字)在客户端之间发送和接收消息?

如何使用python(套接字)在客户端之间发送和接收消息?,python,sockets,server,client,Python,Sockets,Server,Client,我们正在使用python(socket)处理一个项目“拜占庭将军问题”,我们成功地在服务器和两个客户端(client1、client2)之间创建了一个连接。但是我们不知道如何在两个客户之间建立连接,有什么帮助吗 链接模型项目问题: Server.py import socket host = '192.168.43.209' # Standard loopback interface address (localhost) port = 65432 # Port to li

我们正在使用python(socket)处理一个项目“拜占庭将军问题”,我们成功地在服务器和两个客户端(client1、client2)之间创建了一个连接。但是我们不知道如何在两个客户之间建立连接,有什么帮助吗

链接模型项目问题:

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 :  ")

您可以通过这样的方式通过服务器进行客户端到客户端的通信。注意:目前未对其进行测试,因为我不在可以运行以下操作的计算机上:

这段代码的核心是这个答案,它解释了如何向所有客户端发送消息:

我为
客户端使用了
列表
,但您可能会发现使用
字典
更容易

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()
clients=[]#我们已连接到的客户端
clients\u lock=threading.lock()
def侦听器(客户端,地址):
打印“接受的连接自:”,地址
使用客户端锁定:
客户。附加(客户)#将客户添加到我们的列表中
尝试:
尽管如此:
data=client.recv(1024)
如果没有数据:
打破
其他:
打印报告(数据)
#在这里,您需要读取数据
#弄清楚你想把它寄给谁
客户机_to_send_to=1#将此数据发送给客户机1
使用客户端锁定:
如果客户发送到(客户):
客户端[客户端到客户端发送到].sendall(数据)
最后:
使用客户端锁定:
客户端。删除(客户端)
client.close()

你不能。如果在此模型中
A
连接到
B
,则
A
是客户端&
B
根据定义是服务器。根据服务器和客户端的定义,您不能一个客户端接一个客户端。最好的方法是从一个客户端向服务器发送消息,并让服务器将其转发到另一个客户端。@DroidX86,我们有一个服务器,B和C是两个客户端,我们希望B和C通信,ps:B和C可以与服务器a通信。不使用此型号。您可能想研究点对点通信:@Error syntacticalreforme,我应该怎么做,你有密码吗?