网络编程小结

发布时间 2023-10-24 21:01:48作者: songjunwan

网络编程小回顾

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():创建线程,建立连接,和处理通信的问题