socketserver tcp黏包
socket (套接字)
tcp(黏包现象原因) 传输中由于内核区缓冲机制(等待时间,文件大小),会在 发送端 缓冲区合并连续send的数据,也会出现在 接收端 缓冲区合并recv的数据给指定port.
解决办法: 引入内置模块 struct ( 这个模块可以把要发送的数据长度转换成固定长度的字节。这样客户端每次接收消息之前只要先接受这个固定长度字节的内容看一看接下来要接收的信息大小,那么最终接受的数据只要达到这个值就停止,就能刚好不多不少的接收完整的数据了。)
该模块可以把一个类型,如数字,转成固定长度的bytes (2的32次方)
-2147483648 <= number <= 2147483647 #这个是范围
- # 客户端
import time,struct- import socket
- sk = socket.socket()
- sk.connect(('127.0.0.1',9000))
- time.sleep(0.5)
- num = struct.unpack('i',sk.recv(4))
- print(sk.recv(num[0]).decode('utf-8'))
- print(sk.recv(1024))
- ----------------------------
# 服务端- import time,struct
- import socket
- sk = socket.socket()
- sk.connect(('127.0.0.1',9000))
- time.sleep(0.5)
- num = struct.unpack('i',sk.recv(4))
- print(sk.recv(num[0]).decode('utf-8'))
- print(sk.recv(1024))
socketserver
- SocketServer内部使用 IO多路复用 以及 “多线程” 和 “多进程” ,从而实现并发处理多个客户端请求的Socket服务端。
即:每个客户端请求连接到服务器时,Socket服务端都会在服务器是创建一个“线程”或者“进程” 专门负责处理当前客户端的所有请求
- # socketserver模块 上层模块 基于底层socket进一步改造,实现更多功能,tcp协议的server端的并发
# socket模块 所有网络服务的最底层 socket
- import socketserver
- class Myserver(socketserver.BaseRequestHandler):
- def handle(self):
- # 必须实现haddle方法
- # 在简历连接之后所有内容都在haddle中实现就可以了
- # ThreadingTCPServer 多线程处理了并发
- print('-->','执行我啦')
- conn = self.request
- while True:
- msg = conn.recv(1024).decode()
- print(msg)
- conn.send(msg.upper().encode())
- server = socketserver.ThreadingTCPServer(('127.0.0.1',9000),Myserver)
- server.serve_forever() #一直在执行
server.py
- import socket
- import time
- sk = socket.socket()
- time.sleep(1)
- sk.connect(('127.0.0.1',9000))
- while True:
- sk.send(b'hello')
- msg = sk.recv(1024)
- print(msg)
- sk.close()
client.py
socketserver tcp黏包的更多相关文章
- netty]--最通用TCP黏包解决方案
netty]--最通用TCP黏包解决方案:LengthFieldBasedFrameDecoder和LengthFieldPrepender 2017年02月19日 15:02:11 惜暮 阅读数:1 ...
- Python网络编程基础 ❷ 基于upd的socket服务 TCP黏包现象
TCP的长连接 基于upd的socket服务 TCP黏包现象
- python tcp黏包和struct模块解决方法,大文件传输方法及MD5校验
一.TCP协议 粘包现象 和解决方案 黏包现象让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd)执行远程命令的模块 需要用到模块subprocess sub ...
- TCP黏包问题
什么是黏包?什么情况下会出现黏包的情况?该如何避免黏包的情况? 首先来看一个例子 #服务端 import time from socket import * server = socket(AF_IN ...
- 网路编程之socket与 socketserver、黏包
socket与socketerver才是我们学习python中网络编程的重中之重在介绍他们两个之前我先介绍一些相关知识 一.socket 概念 咱们现在ois模型中找到socket所承担的角色 soc ...
- 038.Python关于TCP黏包问题
黏包现象 1 黏包现象演示 服务端 #服务端 import socket sk = socket.socket() # 注册主机到网络 sk.bind( ("127.0.0.1", ...
- tcp黏包问题与udp为什么不黏包
1.先说下subprocess模块的用法,为了举个黏包的例子 # 通过一个例子 来认识网络编程中的一个重要的概念 # 所有的客户端执行server端下发的指令,执行完毕后,客户端将执行结果给返回给服务 ...
- Linux tcp黏包解决方案
tcpip协议使用"流式"(套接字)进行数据的传输,就是说它保证数据的可达以及数据抵达的顺序,但并不保证数据是否在你接收的时候就到达,特别是为了提高效率,充分利用带宽,底层会使用缓 ...
- tcp黏包
转载https://www.cnblogs.com/wade-luffy/p/6165671.html 无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. 回 ...
随机推荐
- 边捆绑: Content Importance Based Edge Bundling for Graph Visualization
Problem 当图所要表达的信息较多时, 图中可能会充满交叉的线[1-2], 甚至整个显示空间都被点.线所覆盖, 这时想通过观察来获取图中的重要信息将会变得非常困难, 这种现象称为图的视觉混乱. K ...
- 搭建Hexo实现个人网站详细教程
全网最全小白搭建Hexo+Gitee/Coding/Github 全网最全小白搭建Hexo+Gitee/Coding/Github 本站内容已全部转移到https://www.myyuns.ltd,具 ...
- SQL语句分类和语法
DQL:Data QueryLanguage 数据查询语言 作用: 查询表中的字段 命令: select 查询 ⑦select 查询列表①from 表1 别名②连接类型 joi ...
- MYSQL之路之表
- Mongo查询list数组中一个字段大于特定条数
由于刚刚接触mongodb,很多语法还不是很了解,写的不好的地方请大佬指出 查询的demo数据 { "_id":Object("xxxxxxxx"), &quo ...
- Digital filter
https://ww2.mathworks.cn/help/signal/examples/practical-introduction-to-digital-filter-design.html D ...
- 【C语言】利用二维数组输出成绩
目的:用二维数组输出下面成绩 希望你可以成为第五名童鞋! 代码: #include<stdio.h> int main() { /* 创建一个带有 4行 5 列的数组 */ ][] = { ...
- HTML学习(3)基础
*开始标签常被称为起始标签(opening tag),结束标签常称为闭合标签(closing tag). *虽然有时候忘记写结束标签有的浏览器也能正常显示内容,但有时候会出现不可预料的结果或错误,所以 ...
- 全网最全!小白搭建hexo+Github/Gitee/Coding
Hexo是一个快速.简洁且高效的博客框架.Hexo使用Markdown解析文章,在几秒内,即可利用靓丽的主题生成静态网页. 本站内容已全部转移到https://www.myyuns.ltd,具体请移步 ...
- docker为镜像添加SSH服务
启动并进入容器中 这里用db1容器完成实验. 安装openssh服务和修改sshd配置文件 安装openssh yum install openssh-server openssh-clients - ...