zoukankan      html  css  js  c++  java
  • Python socket实现处理多个连接

     
     socket实现处理多个连接

     

    实现处理多个连接

      使用whlie循环实现多个客户端,排队请求服务端

     

    循环监听端口发送信息(windos,Linux)

      1.Linux 系统如果客户端断开连接,会循环打印

      2.Windos 系统如果客户端断开连接,会报错中断 

      3.案例:在linux系统下实现

      4.需求:可以实现单个用户断开,并同过排队对服务端访问。

     

    客户端

    #客户端Linux系统下:输入命令通过服务端返回
    import socket
    
    #声明协议类型,同事生成socket连接对象
    client = socket.socket()
    
    #链接地址和端口,元组(本地,端口)
    client.connect(('localhost',6969))
    
    #使用input循环向服务端发送请求
    while True:
        msg = input(">>:").strip()
        if len(msg) == 0:continue
    
        #发送数据 b将字符串转为bys类型
        client.send(msg.encode("utf-8"))
    
        #接收服务器端的返回,需要声明收多少,默认1024字节
        data = client.recv(1024)
    
        #打印data是recv的data
        print("recv:",data)
    
    #关闭接口
    client.close()

    服务端

    #服务端Linux系统下:处理命令并返回
    import socket
    import os
    
    #声明类型,生成socket链接对象
    server = socket.socket()
    
    #监听接收端口元组(本地,端口),绑定要监听的端口
    server.bind(('localhost',6969))
    
    #1.监听
    #2.“5”最大监听数,允许多少人在排队
    server.listen(5)
    
    print("我要开始等待客户端了")
    
    #循环锁定访问客户端
    while True:
    
        #1.等待客户端 #会返回链接的标记位conn,与连接的地址
        #2.客户端同过conn,addr进行通话
        #3.conn就是客户端连接过来而在服务器端为其生成的一个连接实例
        conn,addr = server.accept()
    
        #查看标记位与IP地址
        print(conn,addr)
    
    
        print("客户端 他 进来了!")
    
        #循环处理客户端请求
        while True:
    
            #1.接收数据,1024字节
            #2.如果发不完会存在缓冲去,下次在发送。
            #3.缓冲区每次最多发32768字节
            #4.每个系统不同,超出数值会有限制。
            data = conn.recv(102400)
    
            #返回
            print(data)
    
            #Linux系统内可以判断是否为空。
            if not data:break
    
            #执行命令,赋值给变量
            res = os.popen(data).read()
    
            #返回一个值,返回res命令
            conn.send(res)
    
            #sendll就是循环send,用法发送大型文件。
            #conn.sendll(res)
    
    
    #关闭链接
    server.close()

     

     

     

  • 相关阅读:
    关于数组的排序和拷贝!
    append和appendTo的区别!
    Layui的一点小理解(上)
    winfrom数据导出
    检查 PInvoke 签名的调用约定和参数与非托管的目标签名是否匹配
    文件监听
    C# winform 启动外部程序
    bat命令复制文件
    3.将模型添加到 ASP.NET Core MVC 应用
    2.将视图添加到 ASP.NET Core MVC 应用
  • 原文地址:https://www.cnblogs.com/xiangsikai/p/7838422.html
Copyright © 2011-2022 走看看