非阻塞IO

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
服务端
from socket import *
import time
server = socket(AF_INET,SOCK_STREAM)
server.bind(('127.0.0.1',8081))
server.listen(3)
server.setblocking(False)      #accept变为非阻塞状态,
print('server startting...')
conn_l = []       #存放原始数据
del_l = []     #存放错误的数据
while True:               #链接循环
    try:
        print('=====>',conn_l)    #链接地址
        conn,addr = server.accept()    #如果没有异常处理立马抛出错误    conn是链接,可以收发消息
        # print(addr)
        conn_l.append(conn)
    except BlockingIOError:   #收不到数据干这里的
        time.sleep(4)   #休眠两秒,继续
        for conn in conn_l:    #再次循环列表中的conn
            try:
                data = conn.recv(1024)
                conn.send(data.upper())
            except BlockingIOError:
                pass
            except ConnectionResetError:
                del_l.append(conn)  #错误的conn添加到del_l
        for obj in del_l:
            obj.close()      #和conn.close   一样,只是换了个名字
            conn_l.remove(obj)       #将那个错误的obj直接从元列表删除
        del_l = []            #清空列表    清空之后下次还可以接收,删除了就没地方存放他的值
        continue
#新建一个存放错误值的列表,然后
 
 
客户端
from socket import *
client = socket(AF_INET,SOCK_STREAM)
client.connect(('127.0.0.1',8081))
while True:
    msg = input('p;ease:').strip()
    if not msg:continue
    client.send(msg.encode('utf-8'))
    data = client.recv(1024)
    print(data.decode('utf-8'))

  

posted @   一石数字欠我15w!!!  阅读(303)  评论(0编辑  收藏  举报
编辑推荐:
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 我与微信审核的“相爱相杀”看个人小程序副业
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 如何使用 Uni-app 实现视频聊天(源码,支持安卓、iOS)
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
点击右上角即可分享
微信分享提示