博客
关于我
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中打散数组shuffle
查看>>
Python中执行外部命令
查看>>
Python中拼接numpy数组-ChatGPT4o作答
查看>>
Python中提示:no module named 'PIL'
查看>>
Python中提示:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position
查看>>
python中数据类型存储_浅谈Python中的数据类型
查看>>
python中文件最重要的功能是什么-学 Python 都用来干嘛的?
查看>>
python中文版语言_高盛最新调查:Python超过汉语成为未来最重要技能,你准备学哪种编程语言?...
查看>>
Python中文问题SyntaxError
查看>>
Python中方括号和括号括起来的列表有什么区别?
查看>>
python中时间处理_Python中处理时间的几种方法小结
查看>>
Python中枚举串口(包括虚拟端口)的跨平台方法是什么?
查看>>
python中根号下a怎么写_python中根号怎么表示
查看>>
Python中正则表达式的巧妙使用
查看>>
Python中浮点数的二进制表示(位不是十六进制)
查看>>
Python中特殊函数和表达式 filter,map,reduce,lambda
查看>>
python中用socket检测端口_Python 用socket模块实现检测端口和检测web服务
查看>>
python中用于列表操作的plus和append有什么区别?
查看>>
python中用递归求和
查看>>
python中的@staticmethod
查看>>