博客
关于我
python socket分包发送数据
阅读量:804 次
发布时间: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/

你可能感兴趣的文章
Python 使用pandas 进行查询和统计详解
查看>>
Redis 配置文件redis.conf详细解释
查看>>
python网络爬虫(2)——scrapy框架的基础使用
查看>>
python网络爬虫实例教程试读_Python网络爬虫实战教程(全套完整版) - 学途无忧网 - 做技术的王者 - Powered By EduSoho...
查看>>
Python 使用哈希函数用于加密
查看>>
Python 依赖管理的革新——Poetry 深度解析
查看>>
python 保留精度及增加去除数字的千位分隔符(金额化数字)
查看>>
python 倒计时 9,8,7,。。。。。。0
查看>>
Python 入门开发学习笔记之数据的增删改查
查看>>
Python 入门教程(2)搭建环境 2.4、VSCode配置Node.js运行环境
查看>>
Python 八大排序算法合集
查看>>
python 关于epoll的学习
查看>>
Python 内存管理
查看>>
Python 内嵌函数:它们有什么用处?
查看>>
Python 内置 sum 函数 vs. for 循环性能
查看>>
python 内置slice的用法
查看>>
Python 内置时间模块
查看>>
python 内部如何实现命名元组?
查看>>
Python 写Android App性能:入门到高级
查看>>
python 写入json数据到数据库
查看>>