博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
socket粘包实例个人理解
阅读量:5093 次
发布时间:2019-06-13

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

1 # server.py 2  3 import socket 4 import subprocess 5  6 sk = socket.socket() 7  8 sk.bind(('127.0.0.1', 8081)) 9 sk.listen(5)10 11 while True:12     conn, addr = sk.accept()13     while True:14         try:15 16             recv_data = conn.recv(1024)17             if len(recv_data) == 0:break18             p = subprocess.Popen(str(recv_data, encoding='utf8'), shell=True, stdout=subprocess.PIPE)19             res = p.stdout.read()20             if len(res) == 0:21                 send_data = 'cmd_err'22 23             else:24                 send_data = str(res, encoding='gbk')25 26             send_data = bytes(send_data, encoding='utf8')27 28             ready_tag = 'Ready|%s' % len(send_data)29 30            # 这一步是关键,向客户端发送 消息和数据大小31             conn.send(bytes(ready_tag, encoding='utf8'))32 33             feedback = conn.recv(1024)34             # 收到客户端的消息35             feedback = str(feedback, encoding='utf8')36             # 开始发送数据37             if feedback.startswith('Start'):38                 conn.send(send_data)39         except Exception:40             break41 42     conn.close()43 44 45 # client.py46 47 import socket48 49 cli = socket.socket()50 51 cli.connect(('127.0.0.1', 8081))52 53 while True:54 55     send_data = input('>>:').strip()56     if send_data == 'exit':break57     if len(send_data) == 0:continue58     cli.send(bytes(send_data, encoding='utf-8'))59     # 收到消息60     ready_tag = cli.recv(1024)61     ready_tag = str(ready_tag, encoding='utf-8')62     if ready_tag.startswith('Ready'):63         msg_size = int(ready_tag.split('|')[-1])64 65    # 告知服务端,我收到了消息66     start_tag = 'Start'67     cli.send(bytes(start_tag, encoding='utf8'))68 69     recv_size = 070     recv_msg = b''71 72     while recv_size
View Code

与原始的socke交互相比,个人理解就是在客户端向服务端发起请求,服务端在响应之前主动向客户端发送信号(| 数据的大小),多了一个交互的过程

转载于:https://www.cnblogs.com/BensonChang/p/9114845.html

你可能感兴趣的文章
聚合与组合
查看>>
如何理解汉诺塔
查看>>
洛谷 P2089 烤鸡【DFS递归/10重枚举】
查看>>
Linux基本操作
查看>>
osg ifc ifccolumn
查看>>
C++ STL partial_sort
查看>>
centos redis 安装过程,解决办法
查看>>
IOS小技巧整理
查看>>
WebDriverExtensionsByC#
查看>>
我眼中的技术地图
查看>>
lc 145. Binary Tree Postorder Traversal
查看>>
sublime 配置java运行环境
查看>>
在centos上开关tomcat
查看>>
重启rabbitmq服务
查看>>
正则表达式(进阶篇)
查看>>
无人值守安装linux系统
查看>>
【传道】中国首部淘宝卖家演讲公开课:农业本该如此
查看>>
jQuery应用 代码片段
查看>>
MVC+Servlet+mysql+jsp读取数据库信息
查看>>
黑马程序员——2 注释
查看>>