标题:TCP套接字非阻塞示例:萌新学习笔记
取消只看楼主
zxq0103
Rank: 1
等 级:新手上路
帖 子:36
专家分:0
注 册:2023-3-10
结帖率:0
 问题点数:0 回复次数:1 
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
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.107150 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved