zoukankan      html  css  js  c++  java
  • Python之单线程-非阻塞模式实现TCP服务器连接多客户端

    通过为每个客户端创建一个进程的方式,能够同时与多个客户端进行通讯,但是如果有成百上千个客户端,仍然为每个客户端创建进程的话,需要消耗较多的资源,因此需要创建用单线程实现与多个客户端连接的服务器。

    # 导入 socket、sys 模块

    import socket
    import sys

    Clients=[]#创建客户端socket列表

    def main():
      # 创建 socket 对象
      server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
      localAddr=('',8080)
      server_socket.bind(localAddr)# 绑定端口号
      server_socket.listen(5)# 设置最大连接数,超过后排队
      server_socket.setblocking(0)#将套接字设置为非堵塞  
      while True:
        try:
          
    newClient=server_socket.accept()

        except Exception as result:#如果没有客户端连接则产生一个异常
          pass
        else:#如果有客户端连接,则将新的客户端设置为非阻塞,并添加到客户端列表中
          newClient[0].setblocking(0)
          
    Clients.append(newClient)
        
    Clients_
    invalid=[]#创建无效的客户端列表
        
    for clientSocket,clientAddr in Clients:
          try:
            meg='0'
            
    clientSocket.send(msg.encode('utf-8')#通过发送数据判断客户端是否在线
           except:#客户端不在线
             clientSocket.close()#关闭连接
             Clients_invalid.append((clientSocket,clientAddr))#将客户端计入无效列表
           else:
            try:          
              recvData=clientSocket.recv(1024)
              if len(recvData)>0:
             
       print(recvData))#处理数据
              else:
                pass
              

            except :#接收异常则忽略
              pass
        for client in Clinets_invalid :#从客户端列表中移除无效的客户端
          Clients.remove(client)
    if __name__='__main__':
      main()
  • 相关阅读:
    认识Linux
    Java之安装环境
    Markdown学习
    使用cacti监控linux server的接口流量
    IDRAC安装dell服务器操作系统(linux or windows),用到生命周期管理器
    网络编程--练习题
    linux搭建ntp服务器-添加交换机客户端,windows客户端
    linux centos7搭建redis-5.0.5
    linux centos7搭建mysql-5.7.29
    对称加密与非对称加密
  • 原文地址:https://www.cnblogs.com/sunsuoli/p/12899697.html
Copyright © 2011-2022 走看看