当前位置: 首页> 文旅> 文化 > python代码模拟服务器实验1:阻塞IO

python代码模拟服务器实验1:阻塞IO

时间:2025/8/10 1:30:50来源:https://blog.csdn.net/unforgetablebaby/article/details/141145140 浏览次数:0次

client.py

import socket
import sys# 创建一个TCP/IP套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 连接服务器
server_address = ('localhost', 9090)try:client_socket.connect(server_address)
except ConnectionRefusedError:print("Connection refused")sys.exit()try:# 发送数据message = 'This is a test message.'print(f"Sending: {message}")client_socket.sendall(message.encode('utf-8'))finally:# 发送FINclient_socket.close()

server.py

import socket# 创建一个TCP/IP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)# 绑定套接字到地址和端口
server_address = ('localhost', 9090)
server_socket.bind(server_address)# 开始监听传入连接
server_socket.listen(1)print("Server is waiting for a connection...")# 阻塞等待客户端连接
connection, client_address = server_socket.accept()try:print(f"Connection established with {client_address}")# 循环接收数据while True:data = connection.recv(1024)  # 阻塞等待接收数据if data:print(f"Received: {data.decode('utf-8')}")else:print("No more data from client, closing connection.")breakfinally:connection.close()

在这个例子中,listen(1) 指定连接队列的最大长度为1,这意味着:

如果服务器正忙于处理当前连接,而另一个连接请求到来,那么这个新的连接请求将被放入队列中。
如果在这个时候有第三个客户端请求连接,由于队列长度已经达到 1,第三个请求可能会被拒绝,或者客户端会收到 ECONNREFUSED 错误。

实际使用建议:
在实际应用中,backlog 参数的值通常会设置得比1大,尤其是在处理多个客户端的情况下。例如,常见的值有 5、10 或者更高,这样可以确保服务器能处理更多并发的连接请求而不容易拒绝新的连接。

总结:server_socket.listen(1) 中的 1 是连接请求队列的最大长度,决定了在服务器处理当前连接时,可以有多少其他连接请求被挂起等待处理。

关键字:python代码模拟服务器实验1:阻塞IO

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: