socket解决多次输入问题-大数据接收问题-模块动态导入

客户端 多次接收发送数据

  1. socket中客户端多次接收发送数据;
  2. 服务端增加while循环,可以设置死循环,也可以设置次数;
  3. 大数据接收,可以通过循环累计后一次发送;
python 复制代码
#服务器端代码
import os
import socket

server=socket.socket()
server.bind(('localhost',7265)) #绑定需要监听的port
server.listen() #监听
while True:
    print("等待信息过来")
    conn,addr=server.accept() #等待信息发过来
    print(conn,addr)
    while True:   #数据多次发送接收
        print("msg is coming")
        data = conn.recv(1024)
        if not data:
            print("客户端已断开")
            break   #没有数据时可以跳出循环继续输出命令
        print("执行~~",data)
        cmd_res = os.popen(data.decode()).read() #接收命令在后台调用cmd命令,在控制台输出的标准输出
        if len(cmd_res) == 0:
            cmd_res = "cmd has no output..."
        conn.send(str(len(cmd_res.encode())).encode("utf-8"))  # 先发大小给客户端
        conn.send(cmd_res.encode("utf-8")) #再将数据解码后发送结果
        print("send over~~~")

server.close()
  1. 客户端代码:
python 复制代码
#客户端
import socket
client=socket.socket() #声明socket类型,以及生成连接对象
client.connect(('localhost',7265))

while True:  #while循环可持续发送
    cmd=input("请输入:").strip()
    if len(cmd)== 0: continue
    client.send(cmd.encode('utf-8')) #发送命令
    cmd_res_size=client.recv(1024)  #接收服务器结果的长度,大数据超过了1024
    print("命令结果大小:", cmd_res_size)#输出接收命令的大小
    received_size = 0  #初始化长度和数据
    received_data = b''
    while received_size < int(cmd_res_size.decode()):  #循环接收数据
        data=client.recv(1024)   #接收数据赋值到data
        received_size += len(data)  #接收数据大小循环累计
        received_data += data  #接收数据累计
    else:
        print('recv size:',received_size)   #统一一次发送
        print('recv data:',received_data.decode())

client.close()
  1. 结果展示:

模块动态导入

  1. 静态导入:import os,或者from lib import aa这种类型就是静态导入,这种情况如果没有导入程序就会报错,代码界面红色标记显示如图:----程序启动就预先找这个模块文件

  2. 动态导入:样式importlib.import_module('os')或者mod=__import__('os'),建议使用importlib.import_module('os')这种样式;----程序运行到这块时再去找这个模块文件

    需要测试的功能:

python 复制代码
__author__="ganfeimei"
class Cal:
    def __init__(self):
        self.name='ganfeimei'
        self.age=15
        print("begin~~~")
    def sum(self,a,b):
        return a+b

测试脚本:

python 复制代码
import importlib
module_name = "lib.aa"
try:
    mod=importlib.import_module(module_name)
    sum_result=mod.Cal().sum(3,5)
    print(sum_result)
except ModuleNotFoundError:
    print(f"没有找到模块{module_name},请检查配置")

finally:
    print("end~~")

测试结果:

  1. 设置没有这个模块名师:如图
相关推荐
白帽攻防录43 分钟前
SRC 挖洞:PostScript 打印机驱动双 RCE,打印服务器怎么变成内网跳板
开发语言·网络安全·php·内网安全
聚美智数1 小时前
智能结构化识别-图片结构解析-图像结构化解析-照片结构化解析
android·java·数据库
十年Java程序媛1 小时前
Java枚举Enum完整教程|替代静态常量,开发与面试要点
java·开发语言·spring boot·后端·面试
我是人✓1 小时前
SpringBoot静态资源映射揭秘
java·spring boot·后端
2603_965148111 小时前
电商选品调研:通过关键词搜索API获取市场热销商品,结合商品详情API分析竞品卖点与定价
开发语言·数据库·人工智能·python·信息可视化
土豆.exe2 小时前
nf_tables 的 verdict 被读了两次:一个十年未闭合的位域错配
java·数据库·网络安全·缓存
xixiaoyunya2 小时前
Python 异步编程入门:用 asyncio 轻松实现并发任务
开发语言·python·php
学逆向的2 小时前
C 循环结构的执行效率分析
c语言·开发语言·数据结构·网络安全
小坏讲微服务3 小时前
刚发布一个月的JDK 27,为什么我建议你立刻升级?
java·开发语言·spring boot·spring·架构·求职招聘·springboot4
kunicoding3 小时前
多线程编程核心概念详解:从线程基础到并发安全
java·jvm·安全