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. 设置没有这个模块名师:如图
相关推荐
爱喝雪碧的可乐7 分钟前
MATLAB
开发语言·算法·matlab
文丑颜不良啊1 小时前
LeetCode2081~2100题目解析
java·leetcode
玖米GEO运营王总监2 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
H.莓飛2 小时前
【C++】【STL】vector_OJ题
linux·服务器·开发语言·数据结构·c++·visual studio
叼烟扛炮3 小时前
[LangChain] 学习笔记(03):打破失忆症——对话机制与上下文管理
java·前端·javascript·笔记·学习·langchain
文丑颜不良啊3 小时前
LeetCode2061~2080题目解析
java·leetcode
j7~3 小时前
【C++ 八股文】(篇四)C++11 新特性
开发语言·c++·面试·c++11·八股文
eggwyw3 小时前
C++中大括号的用法合集
开发语言·c++
xiaoye-duck3 小时前
《C++ 项目:手写大模型接入 SDK》本地 Ollama 部署与适配
开发语言·网络·c++·语言模型
特立独行的猫A4 小时前
13MB 单文件、一条命令变服务:把仓颉写的 cjh 内嵌进你的应用,当它的 AI 大脑
java·后端·python