[英]Is there any way to send a message to everyone except the sender?
这个问题与这个问题类似,但那是针对 JavaScript 的,而我的则是针对 Python 的。
如何使用套接字库从服务器向每个连接的客户端发送消息,除了 Python 中的选定客户端?
我正在制作一个简单的游戏,我想在三个客户端中检测到第一个按下按钮的人,然后通知其他两个客户端他们输了,同时通知获胜者他们赢了。
通常,要将信息发送给您所做的客户(在新线程上):
connected_client.sendall(data)
要接收,您可以:
data = socket.recv()
但是从我搜索的内容来看,除了某个客户端之外,我找不到将数据发送到每个连接的客户端的方法。
我想我可以通过为每个运行接收功能的线程创建一个“识别名称”来解决这个问题,但是我找不到一个好的方法来做到这一点,因此我决定寻找一个更好的选择。
我怎样才能做到这一点?
将它们插入列表会有所帮助。 例如...
对于服务器端:
import socket
import threading
# This is where you store all of your Client IP's
client_list = []
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = "yourip"
server_port = 8888
server.bind((server_ip, server_port))
def check_client(client_ip):
while True:
data = client_ip.recv(1024).decode()
if "condition" in data:
for ip in client_list:
if ip != client_ip:
ip.send("something".encode())
def check_connection():
server.listen()
while True:
client_ip, client_address = server.accept()
client_list.append(client_ip)
threading.Thread(target=check_client, args=(client_ip,), daemon=True).start()
check_connection()
所以会发生什么是你调用check_connection
函数来检查传入的连接。 接收到一个后,它将连接附加到client_list
变量中。 同时,它为当前连接创建一个线程check_client
,用于检查正在发送的任何信息。 如果您的一位客户正在发送信息,它会检查"condition"
字符串是否在您发送的数据中。 如果是这样,它会将"something"
字符串发送到您的所有客户端,但自身除外。 请注意,当您发送数据时,它必须以bytes
为单位。
对于客户端:
import socket
import threading
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_ip = "serverip"
server_port = 8888
server.connect((server_ip, server_port))
def receive_info():
while True:
data = server.recv(1024).decode()
if "something" in data:
print("Someone already sent something")
threading.Thread(target=receive_info, daemon=True).start()
while True:
user_input = input("Type 'condition': ")
server.send(user_input.encode())
这只会将您的输入发送到服务器。 如果您在输入中键入"condition"
,它将在除您之外的其他客户端上发送"something"
。 因此,您需要再设置 2 个客户端才能看到结果。
不要忘记设置server_ip
和server_port
的值!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.