昨天我们所做的套接字是有漏洞的,它会出现粘包现象,没有发现这个问题的我们今天会进行演示.今天也会稍微讲解一下基于udp的套接字. 一.基于udp的套接字 udp是无链接的,先启动哪一端都不会报错 udp服务端: ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 while True : #服务器无限循环 cs = ss.recvfrom()/ss.sendto() # 对话(接收与发送) ss.close() # 关闭服务器套接字 udp客户端: cs…
昨天我们所做的套接字是有漏洞的,它会出现粘包现象,没有发现这个问题的我们今天会进行演示.今天也会稍微讲解一下基于udp的套接字. 本篇导航: 基于udp的套接字 粘包现象 粘包 解决粘包方法 struct模块(了解) 一.基于udp的套接字 udp是无链接的,先启动哪一端都不会报错 udp服务端: ss = socket() #创建一个服务器的套接字 ss.bind() #绑定服务器套接字 while True : #服务器无限循环 cs = ss.recvfrom()/ss.sendto()…
Socket概念 Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议. 一.socker层 (在程序中就是一个模块功能可以直接导入使用) Socker 是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,其实就i是一个门面模式,把复杂的协议放在socker后面. IP地址: 12…
目录 黏包现象 二.struct模块及解决黏包问题的流程 三.粘包代码实战 UDP协议(了解) 并发编程理论 多道技术 进程理论 进程的并行与并发 进程的三状态 黏包现象 什么是粘包 1.服务端连续执行三次recv(字节数需要大一些) import socket server = socket.socket() server.bind(('127.0.0.1', 8081)) server.listen(5) sock, addr = server.accept() data1 = sock.r…
目录 一.黏包现象 什么是黏包 黏包现象产生的原因 二.struct模块及解决黏包问题的流程 struct模块 解决黏包问题初级版本 解决过程中遇到的问题 解决黏包问题终极解决方案 三.粘包代码实战 服务端 客户端 四.UDP协议(了解) 五.并发编程理论 操作系统发展史 1.手工操作 -- 穿孔卡片 2.批处理 -- 磁带存储 1.联机批处理系统 2.脱机批处理系统 六.多道程序设计技术 单道技术 多道技术 多道技术详细 1.切换 2.保存状态 总结 七.进程理论 进程与程序的区别 进程的调度…
黏包的解决方案 解决方案一 问题的根源在于,接收端不知道发送端将要传送的字节流的长度,所以解决粘包的方法就是围绕,如何让发送端在发送数据前,把自己将要发送的字节流总大小让接收端知晓,然后接收端来一个死循环接收完所有数据. #_*_coding:utf-8_*_import socket,subprocessip_port=('127.0.0.1',8080)s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)s.setsockopt(socket.…
昨日内容回顾 面向对象复习(json序列化类) 对象.类.父类的概念 三大特性:封装 继承 多态 双下开头的方法(达到某个条件自动触发) __init__:对象实例化自动触发 __str__:对象执行打印操作自动触发 __call__:对象加括号调用的时候自动触发 ... 反射:利用字符串操作对象的属性或方法 hasattr,getattr class MyClass(object): name = 'cx' def __call__(self, *args, **kwargs): print(…
1.黏包现象 1.黏包现象产生的背景: 1.1 服务端连续执行三次recv 1.2 客户端连续执行三次send 执行上述操作会发现服务端一次性接收到了客户端三条消息,而后面两次什么都没接收到,该现象称为"黏包现象". 2.黏包现象产生的原因: 2.1 谁不知道每次的数据到底多大 2.2 TCP也被称为流式协议:数据像流水一样绵绵不绝没有间断,所以无法断开.TCP会针对数据量较小且发送间隔较短的多条数据一次性合并打包发送 3.黏包现象如何避免: 3.1 我们可以控制服务端每次接收字节的数…
前言 我们在开发springboot项目时候,创建好SpringBoot项目就可以通过启动类直间启动,运行一个web项目,非常方便简单,不像我们之前通过Spring+SpringMvc要运行启动一个web项目还需要要配置各种包扫描和tomcat才能启动 我将应用分成了parent+common+component+app这种模式, parent是一个单纯的pom文件,存放项目的一些公共依赖 common则是一个没有启动类的SpringBoot项目,存放项目的核心公共代码 component各种组…
目录 subprocess模块 struct模块 粘包 UDP协议 socket_server模块 subprocess模块 作用: 1.可以帮你通过代码执行操作系统的终端命令 2.并返回终端执行命令后的结果 import subprocess cmd = input('cmd>>') obj = subprocess.Popen( cmd, shell=True, stderr=subprocess.PIPE, # 返回错误结果参数 stdout=subprocess.PIPE # 返回正确…