python - 如何使用 Python(套接字)从客户端向客户端发送和接收消息?
问题描述
我们正在使用 Python(socket)开发一个项目“ByZantine Generals Problem”,我们设法在服务器和两个客户端(client1,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)
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)
客户端1.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 : ")
客户端2.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 和客户端 2 一起通信。
- 让他们通过服务器进行通信
- 这意味着他们将通过连接到服务器进行通信。服务器将在它们之间转发消息。
- 为了使这项工作,您需要创建一个函数并在它们连接时将它们的套接字对象传递给该函数。在该函数中,您将只接收来自客户端的数据。每次收到数据时,您都会将其广播给所有其他客户端。
提示:您可以将每个客户端的套接字对象添加到列表中,以便您可以轻松地将消息广播到网络中的每个客户端。
- 点对点通信
- 要在 p2p 中进行通信,他们不需要连接到服务器。他们只会直接相互交流。p2p 通信的首选协议是UDP 协议。
如果客户端不在交换安全数据,例如服务器不应该访问它,p2p 是最好的方法。因为他们在通信时没有服务器的干扰。