python学习笔记——捌

 第八周

scoket

scoketserver

动态导入模块和类

 

  右上是第一种,右下是第二种,建议使用第二种

断言 assert 相当于if,但比if 看上去更加简洁

如下代码的意思是: 确定obj.name是int类型,如果是True就执行下边的代码

如果不是,就会报错

 

报如下错误

新例子:

 

在客户接收数据时,因为有缓冲区的存在。所以当接收大量数据时,只会接收数据的一部分,下次再接收时,会把上一部分的剩余打出来。这就导致了每次数据接收的都不是本次应该接收的数据,都是上一次剩下的。 所以要先判断,数据大小,多次循环输出即可解决问题。具体方法是:在服务端,用len()方法,计算出数据的长度。发送给客户端。客户端根据数据的大小,循化接收。直至接收的数据 >

服务端发来的数据长度。

 

注意:在服务端 发送大小给客户端时。Len方法的返回值是整数,无法转化成byte类型,所以要用str方法转化成字符串类型,再用decode(),转化成byte类型。

 

因为字符串的len方法和byte的len方法,长度会不一致。所以。。。。不太明白了

 

服务端

 

客户端

粘包两次数据,会合并成一次数据发送,就会产生数据错乱的情况。

这时就在两次send之间,再加入一次交互。

 

 

 

发送文件

 

获得文件的大小

Os.stat(“文件路径”).st_size

SocketServer

scoket的进一步封装

linux上的本地ip

写成0.0.0.0,不写成ifconfig的ip是因为,一台机器上可能会有多个ip地址

如果写死了,就有只有指定的ip能收到数据。其他的本机上的ip地址收不到数据。

客户端断开,会报以下错误

服务端

在服务端需要 写个循环,因为默认连接收一条消息就断开

需要抓异常 客户端断开会报上图的错

 

在写完之后你会发现,程序还是像scoket一样,只能单线程工作 每次

只能同时连接一个客户端。这时只需要改一个地方

 将倒数第二行的 TCPServer 改成 ThreadingTCPServer

客户端

关于 客户端断开后 服务端等待一会 才能继续连接的问题

 

scoket按如下写法

在scokketserver按如下写法

可以在请求的过程中处理一些事情

3个红框 代表 请求前 请求中 请求后

 

 

原文地址:https://www.cnblogs.com/HL-blog/p/7593330.html