1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?

socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?

时间:2022-12-05 22:57:37

相关推荐

socket python 收 发 队列 线程_对于Python中socket.listen()与多线程结合的困惑?

实例代码

服务器等待客户端连接的代码

from threading import Thread

from socket import socket, AF_INET, SOCK_STREAM

def echo_server(addr, nworkers):

# Run the server

sock = socket(AF_INET, SOCK_STREAM)

sock.bind(addr)

# 这里设置了listen(5),listen(5)限制了一个时刻服务器最多接收的客户端。

sock.listen(5)

while True:

client_sock, client_addr = sock.accept()

# 调用echo_client来处理客户端的连接

t = Thread(target=echo_client, args=(client_sock, client_addr))

t.daemon = True

t.start()

echo_server(('',15000)

服务器处理客户端的代码

def echo_client(sock, client_addr):

'''

Handle a client connection

'''

print('Got connection from', client_addr)

while True:

msg = sock.recv(65536)

if not msg:

break

sock.sendall(msg)

print('Client closed connection')

sock.close()

问题描述

问题一

书中是这样描述上面这个例子的: 尽管这个也可以工作, 但是它不能抵御有人试图通过创建大量线程让你服务器资源枯竭而崩溃的攻击行为。

但是我不明白的是服务器已经设置了listen(5),这个listen(5)难道不会限制每次只有5个客户端能够连接吗?攻击者怎么可以创造多个线程?

问题二

对于服务器网络IO延迟有一点不懂的地方,以上面的代码段2为例子,网络IO延迟是不是就是msg = sock.recv(65536)和sock.sendall(msg)中由于网速原因造成的延迟?

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。