博客
关于我
python socket分包发送数据
阅读量:798 次
发布时间:2023-03-06

本文共 2054 字,大约阅读时间需要 6 分钟。

服务器端代码解析与实现

代码结构分析

import socketimport jsonimport structimport timebuffer = 1024q2 = queue.Queue()file_path = os.path.join(os.getcwd(), 'test.json')

数据准备与文件读取

with open(file_path, 'r') as f:    data_json = json.load(f)    q2.put(data_json)    f.close()

数据发送

q2.put('{"a":2,"b":2,"d":1212121}')q2.put('{"a":3,"b":2}')q2.put('{"a":5,"b":2}')q2.put('{"a":5,"b":2}')

sockets配置

sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)sk.bind(('127.0.0.1', 44455))sk.listen(1)

连接处理

conn, addr = sk.accept()while True:    if not q2.empty():        data_str = q2.get()        print('发送data_str')        json_data = json.dumps(data_str)

数据包装

byte_data = json_data.encode('utf-8')        data_len = len(byte_data)        pack_len = struct.pack('i', data_len)        print(pack_len)        conn.send(pack_len)

数据发送优化

i = 0        while data_len > 0:            print(data_len)            if data_len >= buffer:                content = byte_data[i * buffer : (i + 1) * buffer]                conn.send(content)                data_len -= buffer                i += 1            else:                content = byte_data[i * buffer :]                conn.send(content)                data_len = 0                break

客户端代码解析与实现

sockets连接

import socketimport structsk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sk.connect(('127.0.0.1', 44455))

数据接收

buffer = 1024while True:    pack_len = sk.recv(4)    print(pack_len)    if pack_len:        data_len = struct.unpack('i', pack_len)[0]        print(data_len)

数据解析

content = b''        while data_len > 0:            print(data_len)            if data_len >= buffer:                content_temp = sk.recv(buffer)                content += content_temp                data_len -= buffer            else:                content_temp = sk.recv(data_len)                content += content_temp                data_len = 0                break        print(content.decode('utf-8'))

注意事项

  • 请确保服务器端和客户端都已安装相应的库文件
  • 请将实际使用中的端口号替换为合适的值
  • 请确保传输数据的完整性和及时性
  • 建议在实际应用中增加错误处理和异常捕捉

转载地址:http://phafk.baihongyu.com/

你可能感兴趣的文章
Pytest框架中的测试用例执行方式!
查看>>
pytest框架快速入门-pytest运行时参数说明,pytest详解,pytest.ini详解
查看>>
Pytest框架环境切换实战教程!赶快收藏
查看>>
Pytest测试实战|Conftest.py详解
查看>>
Pytest测试框架快速搭建
查看>>
pytest测试框架:最强大的自动化测试工具,让测试变得轻松有趣
查看>>
pytest简介及jenkins集成
查看>>
Pytest自动化框架运行全局配置文件pytest.ini
查看>>
pytest自动化测试-Git中的测试用例运行
查看>>
Pytest自动化测试-简易入门教程(01)
查看>>
Pytest自动化测试-简易入门教程(02)
查看>>
Pytest自动化测试-简易入门教程(03)
查看>>
Pytest自动化测试指定执行测试用例
查看>>
Pytest自动化测试框架 fixture 传参实战
查看>>
pytest自动化测试框架pytest.ini配置文件详细
查看>>
Pytest自动化测试框架,建议收藏。
查看>>
Pytest自动化测试框架:mark用法---测试用例分组执行
查看>>
pytest:4种方法实现 - 重复执行用例 - 展示迭代次数
查看>>
Pytest:一个卓有成效的测试工具
查看>>
python
查看>>