python全栈开发day28-网络编程之粘包、解决粘包,上传和下载的作业

一、昨日内容回顾

    1.  tcp和udp编码

    2.  自定义mysocket解决编码问题

    

二、今日内容总结

  1.粘包

    1)产生粘包原因:

      (1)、接收方不知道消息之间的边界,不知道一次性要取多少字节的数据造成的。

      (2)、数据包较小且时间间隔较小,由于合包机制和Nagle算法,将合成一个大包发送过去,由于接收方不知道精准的拆包机制导致粘包

    2)产生粘包的两种情况

      (1)、发送端需要等缓冲区满才将数据发送出去,产生粘包,(数据包小,时间间隔短,合到一起,产生粘包)

      (2)、接收端不及时接收缓冲区的包,造成接收数据混乱(客户端发送了一段数据,服务端只收了一小部分,服务端下次再收的时候还是从缓冲区拿上次遗留的数据,产生粘包

  2.解决粘包

    思路:

    1、让接收端知道发送数据的大小,发送要传送文件的大小等信息给接收端,这样产生新问题,这个传送文件大小等的信息字典因为不知道他的长度,可能和后边要传送的文件数据产生粘包。

    2、将传送文件大小等的信息字典通过struct模块中的pack方法打包成固定大小为4的包数据,在接收端通过接收4字节的大小包并unpack解包,获取文件信息数据,这样就可以完美避免粘包了。

  3.作业

  4.其他知识总结

    1.获取文件大小有两种方法:

      1)os.path.getsize(path文件绝对路径)

      2)os.stat(path文件绝对路径).st_size

猜你喜欢

转载自www.cnblogs.com/wuchenggong/p/9145616.html