python - TCP 线程 python

标签 python multithreading sockets networking tcp

我正在通过 Python 学习一些网络知识,并提出了 TCPServer 多线程的想法,因此我可以连接多个客户端。问题是我只能连接一个客户端。

import socket
import os
import threading
from time import sleep
from threading import Thread

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket Preparado...')

def Main():
host = '127.0.0.1'
port = 5000

s.bind((host, port))
print('Enlaze listo...')

print('Escuchando...')
s.listen(5)
c, addr, = s.accept()
os.system('cls')

print('Conexion desde: '+str(addr))

def handle_client(client_socket):
while True:
    data = client_socket.recv(1024).decode('utf-8')
    if not data: break
    print('Client says: ' + data)
    print('Sending: ' + data)
    client_socket.send(data.encode('utf-8'))
client_socket.close()

if __name__ == '__main__':
while True:
    Main()
    client_socket, addr = s.accept()
    os.system('cls')
    print('Conexion desde: '+str(addr))
    Thread.start_new_thread(handle_client ,(client_socket,))
s.close()

编辑:这是我的实际代码,为了测试它,我打开了两个 Client.py 代码并尝试连接到它。第一个 Client.py 成功连接(尽管在接收和发送回信息时存在错误)第二个执行但它没有在服务器输出中显示为已连接或其他内容,它只是编译并保持这样。

最佳答案

每次获得新连接都需要创建一个新线程

import socket
import thread

host = '127.0.0.1'
port = 5000

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print('Socket Ready...')

s.bind((host, port))
print('Bind Ready...')

print('Listening...')
s.listen(1)

def handle_client(client_socket):
    while True:
        data = client_socket.recv(1024)
        if not data: break
        print('Client says: ' + data)
        print('Sending: ' + data)
        client_socket.send(data)
    client_socket.close()

while True:
    client_socket, addr = s.accept()
    print('Conexion from: '+str(addr))
    thread.start_new_thread(handle_client ,(client_socket,))
s.close()

关于python - TCP 线程 python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39246259/

相关文章:

Java Socket 不等待接收字节

python - 使用 matplotlib 的结果不一致

python - 将 DataFrame 转换为对象数组

python - 如何使用嵌套的 Python 字典和 D3.js?

python+加密: Encrypting session key using public key

android - MediaPlayer 应该在单独的线程中运行吗?

c - 我正在尝试将多个客户端连接到该服务器,但代码似乎不起作用>

python - 在 Windows 上测量每个线程的 CPU 时间

java - 增加内核数量时性能下降

java - 在 JBoss 7 AS 中使用 Netty