tcp服务器单线程处理多任务代码

import socket
import time

# 处理服务器的请求,创建socket对象。绑定套接字
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcp.bind(("", 8080))
tcp.listen(128)
# 设置套接字为非堵塞的方式
tcp.setblocking(False)
print(tcp)
# 收到数据后建立一个列表
a = list()
# 使其地址不会重用
# 收到接收数据

while True:
    time.sleep()
    try:  # 如果有异常则会报错
        new_socket, new_addr = tcp.accept()  # 1.返回对象为一个元组 2.如果没有返回对象会报错
    except Exception as ret:
        print("有异常啦-------没有产生对象")
    else:
        print("没有产生异常------来了我的对象")
        new_socket.setblocking(False)  # 新对象不堵塞
        a.append(new_socket)
    # 打印里边对象,对象为多个,所以用循环语句
    for client_socket in a:

        # 每个newsocket对象都要接收recv数据
        try:
            recv_data = client_socket.recv(1024)
        except Exception as ret2:
            print("没有发送数据来")
            print("ret2")
        else:
            print("-----没有异常------有返回对象但是数据可能还没过来")
            print(recv_data)
            if recv_data:
                # 对方发送来了数据
                print("------对方发送来了数据-----")
            else:
                client_socket.close()
                a.remove(client_socket)
                print("-----客户端已经关闭-----")

使用网络调试助手充当客户端

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值