博客
关于我
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/

你可能感兴趣的文章
python3 模板库_Python3 标准库概览_Python教程_我爱模板网 - 提供下载各种免费建站资源,免费网站模板,免费网页特效,让你爱上建站!...
查看>>
Python3 求最大/小值及索引值 Numpy
查看>>
python3+django使用celery执行某些任务失败的解决方案
查看>>
Python3+Requests+Unittest实战系列【一】
查看>>
python3+requests+unittest实战系列【一】
查看>>
python3+requests+unittest实战系列【二】
查看>>
Python3+Requests+Unittest实战系列【二】
查看>>
python3----ASCII
查看>>
Python3-selenium自动化测试框架,结合HTMLTestRunner测试报告!
查看>>
Python3-如何自我更新作为服务运行的应用程序
查看>>
Python3.1-网格模拟概念性问题
查看>>
Python3.12 解决conda环境libstdc++版本过低问题
查看>>
python3.2批量查询IP地址区域
查看>>
Python3.5中协程和未来/任务之间的区别?
查看>>
python3.5实现socket通讯(TCP)
查看>>
python3.6 ubuntu部署nginx、 uwsgi、 django
查看>>
Python3.6.3中,functools似乎不能用
查看>>
python3.6.5+cuda9+cudnn7.1+win10+tensorflow-gpu1.9.0下载配置
查看>>
python3.6使用pickle序列化class
查看>>
python3.6入门到高阶(全栈) day027 网络通信协议 osi七层模型
查看>>