python tcp服务器单线程非阻塞实现并发

# 没有测试 但是能运行 仅供小伙伴们参考 vs2017 w10
import socket
def main():
   ser_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
   #注意 这里是是一个元祖 我老是忘
   ser_socket.bind(("",12345))
   ser_socket.listen(128)
   ser_socket.setblocking(False)
   cli_socket_list=list()
   while True:
       try:
            new_client,new_client_addr=ser_socket.accept()
      #因为这里是非阻塞 所以当没有链接请求时这里会产生异常
       except Exception as Ex:
           pass
       else:
       #设置新的客户端为非阻塞
           new_client.setblocking(False)
           cli_socket_list.append(new_client)
       for cli_socket_single in cli_socket_list:
           try:
               new_client_content=cli_socket_single.recv(1024)
           #这里同样 因为是非阻塞 会来看是否有数据 如果没有会产生异常 
           except Exception as Ex:
               pass 
           else:
           #  这里没有异常 这里有两种情况 一种是客户端使用close()关闭链接但是没有数据  一种是有数据
               if new_client_content:
                   print(new_client_content)
               else:
                   cli_socket_list.remove(cli_socket_single)
                   cli_socket_single.close()
if __name__=="__main__":
    main()
    





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值