客户端 多次接收发送数据
- socket中客户端多次接收发送数据;
- 服务端增加while循环,可以设置死循环,也可以设置次数;
- 大数据接收,可以通过循环累计后一次发送;
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()
- 客户端代码:
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()
- 结果展示:

模块动态导入
-
静态导入:import os,或者from lib import aa这种类型就是静态导入,这种情况如果没有导入程序就会报错,代码界面红色标记显示如图:----
程序启动就预先找这个模块文件
-
动态导入:样式
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~~")
测试结果:

- 设置没有这个模块名师:如图
