如何使用python(套接字)在客户端之间发送和接收消息?
我们正在使用python(socket)处理一个项目“拜占庭将军问题”,我们成功地在服务器和两个客户端(client1、client2)之间创建了一个连接。但是我们不知道如何在两个客户之间建立连接,有什么帮助吗 链接模型项目问题: Server.py如何使用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
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,我应该怎么做,你有密码吗?