标题:TCP套接字非阻塞示例:萌新学习笔记
只看楼主
zxq0103
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2023-3-10
结帖率:0
 问题点数:0 回复次数:3 
TCP套接字非阻塞示例:萌新学习笔记
程序代码:
import os,sys
from socket import *
from time import ctime,sleep
# TCP套接字非阻塞示例
# 循环等待连接,当没有连接时,每隔10秒写入一行日志
fw = open('log.txt','a+',encoding='utf-8')
# 以utf-8编码格式打开日志文件追加模式

sockfd = socket()
sockfd.bind(('0.0.0.0',8888))
sockfd.listen(3)

sockfd.setblocking(False) # 设置非阻塞
# sockfd.settimeout(3) #设置超时时间3秒
time_out = 0
print('Waiting for connect...')
while True:
    # 尝试接收连接,返回套接字和地址
    try: connfd, addr = sockfd.accept() 
     # 当出现无连接和超时异常后
    except (BlockingIOError,timeout) as e:
        sleep(0.1) # 延迟0.1秒
        time_out += 1
        if time_out > 100: # 每延迟10秒写一次日志
             # 把错误信息写入日志文件
            fw.write("%s : %s\n"%(ctime(),e))
            fw.flush() # 刷新保存日志文件
            time_out = 0
            print('Waiting for connect...')
    else:
        wait_time = 0
        print('no msg')
        while True:
            try:
                data = connfd.recv(1024)
                print(data)
                connfd.send(b'OK')
                wait_time = 0
            except:
                sleep(0.1) # 无信息异常等待0.1秒  
                wait_time += 1
                if wait_time > 100: # 当10秒无信息,则提示一次
                    print('no msg')
                    wait_time = 0
搜索更多相关主题的帖子: print TCP 非阻塞 日志 套接字 
2023-04-27 10:08
sssooosss
Rank: 9Rank: 9Rank: 9
等 级:禁止访问
威 望:3
帖 子:664
专家分:1115
注 册:2019-8-27
得分:0 
共同学习
2023-04-27 19:04
东海ECS
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:Python
等 级:版主
威 望:19
帖 子:376
专家分:1454
注 册:2023-1-24
得分:0 
这段代码是一个使用 TCP 套接字的非阻塞示例,其主要特点是:

1.通过设置套接字为非阻塞模式,使得程序在等待连接或接收数据时不会被阻塞,可以在无须等待的时间内执行其他操作;
2.通过 sleep() 方法来实现延迟操作,延迟的时间可以灵活调整,以免长时间占用 CPU 资源;
3.通过捕捉 BlockingIOError 和 timeout 异常,及时释放 CPU 资源,并记录日志,以便后续调试与分析;
4.使用 while 循环来持续等待客户端数据,通过 try-except 语句捕获异常并在没有接收到数据时等待一段时间,以免出现死循环等不必要的问题。

需要注意的是,该代码是一个简化版的示例,实际使用时应该结合具体应用场景进行相应的优化和修改。

会当凌绝顶,一览众山小.
2023-04-27 19:20
zxq0103
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2023-3-10
得分:0 
回复 3楼 东海ECS
2023-04-28 10:42



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-512053-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.057708 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved