gpt4 book ai didi

Python 逻辑与将数据发送到客户端列表发生冲突

转载 作者:太空宇宙 更新时间:2023-11-03 18:57:14 25 4
gpt4 key购买 nike

问题:服务器仅将数据发送到最新的客户端。

说明:

我有一个名为 User_list 的列表。该列表包含两种类型的信息:连接和作为每个连接的属性的用户名。

如果有人连接,服务器会收到一个用户名,检查该用户名是否在其列表中,如果发现不在,则向每个人发送包含最新添加的用户名的完整列表。但它似乎只将其发送给最新的客户端。

这是一个slideshow发生的事件。 (命令提示符是客户端)

我还想在 Pastebin 上添加服务器代码:

# Owatch's Multi-Threading Username Sever. (Because the select module can suck it)
from socket import *
import threading
import os
import csv
import sys
# Defining Important Information
User_List = []
Connections_List = []
# Making a thread class for each connection recieved.
class Client(threading.Thread):
def __init__(self,conn):
super(Client, self).__init__()
self.conn = conn
self.username = self.conn.recv(1024).decode()
if not any(user.username == self.username for user in User_List):
print("New guy")
# Add new guy to the list
User_List.append(self)

# Get everyone's names
current_userlist = [user.username for user in User_List]

# Send everyone's names to everyone
for x in User_List:

conn.send(x.username.encode()) # <--- Key line to the problem


U_HOST = input("Host: ")
U_PORT = input("Port: ")

SS = socket(AF_INET,SOCK_STREAM)
SS.bind((U_HOST,int(U_PORT)))
SS.listen(2)


while True:
Connection,Address = SS.accept()
Connections_List.append(Address)
print("Connection Taken, and address added to list")
CX = Client(Connection)
CX.start()

这是Client如果您想修改它,也可以:

from socket import *
import threading
import os
import csv

Username = ("Owatch")
# ^^ Change Username to make a new Client!!

host = input("Host: ")
port = input("Port: ")
try:
ss = socket(AF_INET,SOCK_STREAM)
ss.connect((host,int(port)))
except IOError:
print("Console: Error Encountered During Username Accuasition")

ss.send(Username.encode())
print("\n Username Sent...")
while True:
try:
print("\nWaiting to Recieve Data")
data = ss.recv(1024)
if data:
translated_data = data.decode()
print(translated_data)
if translated_data == Username:
print("It's one of ours!")

else:
Client_Username = translated_data
print ("Foreign Username is set to be: ", Client_Username)


except Exception as e:
print (vars(e))

感谢您的宝贵时间。

最佳答案

所以从你的评论中我可以看出你意识到了

conn == self.conn

如果您想向用户x发送内容,您当然必须这样做

x.conn.send(something)

现在,如果你在循环中这样做

for x in User_List:
x.conn.send(x.username.encode())

这将向每个用户发送他自己的名字。

您希望将每个名称发送给每个用户。再次。 每个名字都应该发送给每个用户。这是两个循环。您需要一个循环来迭代用户连接,并需要另一个循环来向他发送所有名称。

for x in User_List:
for y in User_List:
x.conn.send(y.username.encode())

您可能还想阅读 PEP-8 .

关于Python 逻辑与将数据发送到客户端列表发生冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17003326/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com