网络编程小结

上周小回顾

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

10.socket和socketserver的区别点以及共同点

1.都是用于网络编程来创建服务器和客户端

2.都在python中提供了构建网络应用的功能

3.都支持不同类型的网络通信协议,如TCP和UDP

4.可以用于创建多线程或多进程的网络应用

区别点:
Socket(套数字):类似自助餐厅:需要自己挑选食材、烹煮食物等,有很大的自由度但是需要处理一切细节。

特点:高度自定义

Socketserver(网络服务框架):类似高级餐厅,提供了完整的用餐流程,只要坐下来、点餐等所有服务和细节都有对应的服务员安排好。

特点:易于使用

Socket提供了更多的自定义选项,适合处理特殊的情况,socketserver提供了一套流程,适合通常的情况。

posted @   scxlzb  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示