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. 设置没有这个模块名师:如图
相关推荐
小羊没烦恼!5 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里5 天前
java中的继承和多态的区别
java
小羊没烦恼!5 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕5 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码5 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖5 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时5 天前
01-06-A-JVM排查实战详解
java·jvm
伞伞悦读5 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
vipxieliang5 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
C语言小火车5 天前
C/C++ 为什么需要编译器?
开发语言·c++