目录
网络编程小回顾
1.加入通信循环,使客户端和服务端的可以相互发数据
2.加入连接循环,可以接收多个客户端的连接请求
3.执行ssh命令的小案例subprocess
subprocess这个模块是可以执行系统命令
4.粘包问题:就是发送的数据有的合并在了一起,具体情况是tcp这个协议的问题,tcp是流式协议,这个协议会有概率把时间间隔较短以及数据量较小的数据,一次性发送来节省资源
5.解决粘包问题:视频里面的方法太水了,对于粘包问题最常见且相对简便的方法是定长消息或消息边界标记
定长消息:就是给每条消息的长度固定一个特定的字节数,就是给消息长度加点限制
消息边界标记:简白点就是使用换行符\n或回车符等
6.基于socket的udp
发送:sendto
接收:recvfrom
7.udp协议的特点
可以发空(数据报协议,自带报头)
不需要建立连接(这也是会出现丢包的原因)
不会粘包
不可靠(客户端,服务端谁断开都不受影响)
8.socketserver的使用(并发)
这个方法最大的特殊点就是可以实现并发,什么是并发就是可以接受很多个客户端来发送数据
TCP的服务器
server = socketserver.ThreadingTCPServer(它就是TCP服务器本身)
server.server_forever()开启服务器并监听
写一个类,类里面重写handle,方法内能实现收发数据(并发起来)
UDP的服务器
server = socketserver.ThreadingUDPServer(它就是TCP服务器本身)
server.server_forever()开启服务器并监听(这步不能少去)
写一个类,类里面重写handle,方法内能实现收发数据(并发起来)
同时这两个服务器里面的self.request是不一样的
还有要想获得正确的客户端地址要用到self.client_address因为正确的IP地址和端口号被包装到了这里面
9.socketserver源码分析
ThreadingTCPServer里面的init替我们创建了socket、bind、listen这些方法
server.serve_forever():创建线程,建立连接,和处理通信的问题
标签:socketserver,编程,网络,粘包,并发,服务器,server,小结,客户端 From: https://www.cnblogs.com/slzjb/p/17785747.html