python之socket.listen()参数实验 作者:马育民 • 2019-05-21 16:32 • 阅读:10526 # 概述 本文通过代码实验socket.listen()方法参数的含义 ### 语法 ``` listen(backlog) ``` ##### 参数说明: - backlog:指定在拒绝连接之前,操作系统可以挂起的最大连接数量。 python3.5以后,可不调用此方法 如果未指定,则选择默认的合理值。 如果指定,至少为1 ### 官方解释 https://docs.python.org/3.6/library/socket.html?highlight=socket#socket.socket.listen ### 白话解释 当socket服务器端不能处理客户的的连接请求时,操作系统 可以接收 socket客户端 连接请求的最大数 # 实验 通过实验,感受该方法的作用 ### 服务器端代码 ``` import socket,time s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('0.0.0.0',9000)) s.listen(5) while True: # 模拟服务器一直在处理耗时操作,无法接收请求 time.sleep(1000) conn,addr=s.accept() conn.close() ``` ### 客户端代码 ``` import socket i=0 for i in range(10000): s = socket.socket() s.connect(('127.0.0.1', 9000)) print('conn num:',i) s.close() ``` ### 实验1 现在windows中运行服务器端,然后运行客户端代码(客户端在任意平台运行都可以),客户端提示如下: ``` conn num: 0 conn num: 1 conn num: 2 conn num: 3 conn num: 4 Traceback (most recent call last): File "client.py", line 5, in s.connect(('127.0.0.1', 9000)) ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 ``` 运行5次报错,当服务器不能及时处理,那么队列中还能接受5个请求 # 实验 通过实验,了解在不同操作系统中,可以挂起的最大连接数量。 ### 服务器端代码 s.listen()方法的值不能过大,在不同的操作系统中有极限值 ``` import socket,time s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.bind(('0.0.0.0',9000)) # 先设置成5000 s.listen(5000) while True: # 模拟服务器一直在处理 time.sleep(1000) conn,addr=s.accept() conn.close() ``` ### 实验2 现在windows中运行服务器端,然后运行客户端代码(客户端在任意平台运行都可以),客户端提示如下: ``` conn num: 197 conn num: 198 conn num: 199 Traceback (most recent call last): File "client.py", line 5, in s.connect(('127.0.0.1', 9000)) ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。 ``` 运行200次才报错,说明在windows系统中,当服务器不能及时处理,那么队列中还能接受200个请求 ### 实验3 现在linux中运行服务器端,然后运行客户端代码(客户端在任意平台运行都可以),客户端提示如下: ``` conn num: 125 conn num: 126 conn num: 127 conn num: 128 conn num: 129 Traceback (most recent call last): File "client.py", line 5, in s.connect(('192.168.1.113', 9000)) TimeoutError: [WinError 10060] 由于连接方在一段时间后没有正确答复或连接的主机没 有反应,连接尝试失败。 ``` 运行130次才报错,说明在linux系统中,当服务器不能及时处理,那么队列中还能接受130个请求 原文出处:http://malaoshi.top/show_1EF3N46D2NeU.html