摘要: 黏包 # tcp协议在发送数据时,会出现黏包现象. (1)数据粘包是因为在客户端/服务器端都会有一个数据缓冲区, 缓冲区用来临时保存数据,为了保证能够完整的接收到数据,因此缓冲区都会设置的比较大。 (2)在收发数据频繁时,由于tcp传输消息的无边界,不清楚应该截取多少长度 导致客户端/服务器端,都有 阅读全文
posted @ 2019-04-28 23:17 夜雨潇湘子 阅读(120) 评论(0) 推荐(0) 编辑
摘要: (1)client客户端: import socket sk = socket.socket() sk.connect( ("127.0.0.1",9000)) while True: sk.send(b'hello') msg = sk.recv(1024) print(msg) sk.close 阅读全文
posted @ 2019-04-28 23:10 夜雨潇湘子 阅读(146) 评论(0) 推荐(0) 编辑
摘要: # upd 协议:(1)#client 端口:import socketsk = socket.socket(type=socket.SOCK_DGRAM)message = "我来了大哥"# 发送数据sk.sendto(message.encode("utf-8"),("127.0.0.1",90 阅读全文
posted @ 2019-04-28 22:56 夜雨潇湘子 阅读(113) 评论(0) 推荐(0) 编辑
摘要: (1)client端口:import socket# 产生一个socket对象sk = socket.socket()# 建立连接sk.connect( ("127.0.0.1",9000) )# 发送消息(发送的数据是二进制字节流)sk.send("早".encode("utf-8"))# 等待接 阅读全文
posted @ 2019-04-28 22:51 夜雨潇湘子 阅读(140) 评论(0) 推荐(0) 编辑
摘要: TCP(Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)、传输效率低全双工通信(发送缓存&接收缓存)、面向字节流。使用TCP的应用:Web浏览器;电子邮件、文件传输程序。 UDP(User Datagram Protocol)不可靠的、无连接的服务, 阅读全文
posted @ 2019-04-28 22:46 夜雨潇湘子 阅读(140) 评论(0) 推荐(0) 编辑
摘要: 路由器与交换机功能有什么不同【详细介绍】 路由器和交换机的功能什么区别 ?交换机的作用可以简单的理解为将一些机器连接起来组成一个局域网。而路由器的作用在于连接不同的网段并且找到网络中数据传输最合适的路径,可以说一般情况下个人用户需求不大。路由器是产生于交换机之后,所以路由器与交换机也有一定联系,并不 阅读全文
posted @ 2019-04-28 22:44 夜雨潇湘子 阅读(302) 评论(0) 推荐(0) 编辑
摘要: arp协议:通过ip找mac(交换机不能识别ip) arp解析表: mac 和 ip 的映射关系 arp协议: 通过ip找到mac,可以减少广播的频率,减少主机的损耗. arp协议: 能够完成,依靠交换机一次广播,一次单播放完成的; 传输层: 端口 + 数据信息 网络层: ip + 端口 + 数据信 阅读全文
posted @ 2019-04-28 22:42 夜雨潇湘子 阅读(204) 评论(0) 推荐(0) 编辑
摘要: osi七层模型 #(应用层,表示层,会话层) => 应用层 => 表达一个数据信息 # 传输层 port(端口) tcp/udp协议 硬件设备:四层交换机 四层路由器 # 网络层 ip协议 硬件设备:三层路由器,三层交换机 # 数据链路层: mac地址 arp协议 硬件设备:二层交换机,网卡 # 物 阅读全文
posted @ 2019-04-28 22:40 夜雨潇湘子 阅读(130) 评论(0) 推荐(0) 编辑
摘要: 网络开发的两大架构 c/s 架构 : client server (客户端 服务器端) qq,微信,网易云音乐,微博,王者荣耀,... B/S 架构 : Brower server(浏览器 服务器端) 个人电脑可不可以当成服务器?一般不推荐(配置低) 百度,阿里,腾讯大企业所用的服务器 b/s c/ 阅读全文
posted @ 2019-04-28 22:35 夜雨潇湘子 阅读(220) 评论(0) 推荐(0) 编辑
摘要: # 对于服务器自己本身,一个程序只能绑定一个端口 # 同一个端口可以多个客户端来连接, # 只要server_ip+ server_port +client_ip + cilent_port 不一样,就是唯一 客户端我这里只写一个,基本大同小异,下面的都是服务端的 client: import so 阅读全文
posted @ 2019-04-28 22:33 夜雨潇湘子 阅读(346) 评论(0) 推荐(0) 编辑
摘要: 最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢? 要知其然,更要知其所以然。所以有了下面的深入研究: 首先强调背景: 1、GIL是什么? GIL的全称是Global Interpreter Lock(全局解释器锁),来源是py 阅读全文
posted @ 2019-04-28 22:32 夜雨潇湘子 阅读(150) 评论(0) 推荐(0) 编辑
摘要: 回调函数 就是一个参数,将这个函数作为参数传到另一个函数里面. 函数先执行,再执行当参数传递的这个函数,这个参数函数是回调函数 语法: tp.submit(func,i).add_done_callback(call_back) 定义的call_back函数就是一个回调函数 (1)线程池 >是由子线 阅读全文
posted @ 2019-04-28 22:31 夜雨潇湘子 阅读(161) 评论(0) 推荐(0) 编辑
摘要: 协程: 也叫纤程,协程是线程的一种实现,指的是一条线程能够在多任务之间来回切换的一 种实现,对于CPU、操作系统来说,协程并不存在 任务之间的切换会花费时间.目前电脑配置一般线程开到200会阻塞卡顿 . 协程的实现: 协程帮助你记住哪个任务执行到哪个位置上了,并且实现安全的切换 一个任务一旦阻塞卡顿 阅读全文
posted @ 2019-04-28 22:30 夜雨潇湘子 阅读(203) 评论(0) 推荐(0) 编辑
摘要: # 新版本的进程池 ProcessPoolExecutor # 实例化进程池 ProcessPoolExcutor(cpu_count) # 异步提交任务 submit / map # 阻塞直到任务完成 shutdown # 获取子进程的返回值 result # 使用回调函数 add_done_ca 阅读全文
posted @ 2019-04-28 22:28 夜雨潇湘子 阅读(2191) 评论(0) 推荐(0) 编辑
摘要: # 线程池 # 实例化线程池 ThreadPoolExcutor (推荐cpu_count*(n+1)) # 异步提交任务 submit / map # 阻塞直到任务完成 shutdown # 获取子线程的返回值 result # 使用回调函数 add_done_callback (1)基本用法: 阅读全文
posted @ 2019-04-28 22:28 夜雨潇湘子 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 线程常用队列有: queue LifoQueue PriorityQueue 语法: 大致和进程队列语法一致 put 往队列当中放值,超过队列长度,直接加阻塞 get 如果获取不到加阻塞 put_nowait 如果放入的超过了队列长度,直接报异常错误 get_nowait 如果获取到直接报异常错误 阅读全文
posted @ 2019-04-28 22:25 夜雨潇湘子 阅读(469) 评论(0) 推荐(0) 编辑
摘要: # ### 定时器:指定时间执行任务 from threading import Timer def func(): print("目前正在执行任务") t = Timer(5,func) #5秒后执行func函数 t.start() print("主线程") 阅读全文
posted @ 2019-04-28 22:23 夜雨潇湘子 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 语法:wait from threading import Condition con= Condition() conn.acquire() conn.wait() 也可以传参指定等待时间,不传参相当于阻塞,根据notify数量放行 wait下面写上相应逻辑代码 con.release() #语法 阅读全文
posted @ 2019-04-28 22:22 夜雨潇湘子 阅读(136) 评论(0) 推荐(0) 编辑
摘要: <一>Event事件 线程Event基本和进程的Event语法是一样的 # wait() 动态给程序加阻塞 # set() 将内部属性改成True # clear() 将内部属性改成False # is_set() 判断当前属性(默认是False) e = Event() print(e.is_se 阅读全文
posted @ 2019-04-28 22:21 夜雨潇湘子 阅读(144) 评论(0) 推荐(0) 编辑
摘要: (1)线程之间虽然数据共享,但是多个线程同时修改同一份数据,依然会造成数据的不准确,因此,也需要加 上线程锁Lock,用法和进程锁一样,只不过是从threading里面导包 # (1)常见情况引发的死锁问题,模拟4个人吃一碗面 from threading import Thread,Lock im 阅读全文
posted @ 2019-04-28 22:19 夜雨潇湘子 阅读(144) 评论(0) 推荐(0) 编辑