python - 显示所有连接到套接字服务器的客户端并向其发送数据

标签 python multithreading python-3.x sockets server

我有这个简单的代码:

import socket

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host, port))
socket.listen()
while True:
    client_socket, addr = socket.accept()
    send = input("Send: ") # but I need a way to send it to all the clients connected
    if send == "devices":
    # here I'd have a list of all devices connected
    client_socket.send(send.encode())
    data = client_socket.recv(4096)
    print (data)

正如我在评论中所写,我需要一种将其全部管理的方法。我能怎么做?也许与_thread库?

最佳答案

您可以维护一个客户端列表,该列表可以传递给对所有客户端执行操作的外部函数。

import socket

host = ''
port = 1000
max_connections = 5


socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host, port))
socket.listen(max_connections)
clients = []    # Maintain a list of clients
try:
    while True:
        client_socket, addr = socket.accept()
        clients.append(client_socket)    #Add client to list on connection
        i_manage_clients(clients)       #Call external function whenever necessary
except KeyboardInterrupt:
    socket.close()

def i_manage_clients(clients):    #Function to manage clients
    for client in clients:
        client.send('Message to pass')

上面的示例演示了如何一次将数据发送到所有客户端。您可以使用
import socket
from thread import *

host = ''
port = 1000
max_connections = 5


socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.bind((host, port))
socket.listen(max_connections)
try:
    while True:
        client_socket, addr = socket.accept()
        start_new_thread(i_manage_client, (client_socket,addr))
except KeyboardInterrupt:
    socket.close()

def i_manage_client(client_socket, addr):    #Function to manage clients
    client_socket.send('Message to pass')
    data = client_socket.recv(4096)
    print(client_socket)
    print(addr)
    print(data)

关于python - 显示所有连接到套接字服务器的客户端并向其发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45262584/

相关文章:

python - 列表元素列表的组合

c++ - 特定线程数c++

objective-c - Objective C - 后台执行选择器并且分离新线程选择器?

java - 在桌面和移动 CPU 上使用 Java 进行并行处理

javascript - 哪种方法更好: Python SDK (server side) or JavaScript SDK (client-side) to add to and update cloud firestore?

Python discord.py 安装

python - TensorFlow LSTM : Why does test accuracy become low, 但没有训练一个?

python - pip install django-toolbelt 出现错误 :"codecs.ascii_decode(input, self.errors)[0] UnicodeDecodeError: ' ascii' 编解码器无法解码字节 0xc2

python - 使用 Qt 和 Python 显示一系列缩略图的正确方法

python - 如何循环遍历字典列表,并在 Ansible 中打印出每个键值对