博客
关于我
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 导入requests报错No module named requests
查看>>
python 将函数加到列表中进行调用
查看>>
python 将图片与字符串相互转换
查看>>
Python 嵌套字典全面指南
查看>>
Python 常见的错误类型和继承关系
查看>>
python 常量_零基础学Python系列之一:Python的变量与常量
查看>>
Python 并发编程
查看>>
python 序列化操作
查看>>
Python 开发者,这 7 个 VS Code 插件极力推荐
查看>>
python手把手视频_硬货 | 手把手带你构建视频分类模型(附Python演练))
查看>>
python 录音左右声道_Python分离立体声wav压缩文件的左右声道
查看>>
Python 循环异或对文件进行加解密
查看>>
Python开发环境搭建(附VMware安装包及虚拟机环境)
查看>>
python 微信扫码登录_python实现微信第三方网站扫码登录(Django)
查看>>
Python 快速下载依赖
查看>>
python实现非参数统计的Cochran检验 (附完整源码)
查看>>
Python 手写数字识别-3-sklearn中的几种算法
查看>>
Python 打开文件注意事项
查看>>
python 批量修改文件名_python windows下批量修改文件名
查看>>
Python 抓取网页乱码问题 以及EXCEL乱码
查看>>