这两次课所学的内容是对前面的提升,涉及到TCP通信时的数据结构,以及对收到的数据进行分割处理。

目前掌握的部分:

  1. 最基本的建立通信。
  2. Strip()这个方法是把接收到的数据中的空格和回车换行给去掉。
  3. 在通信过程,数据的发送和接收都是以字节的形式,而我们输入的的是字符串的格式。所以数据在发送前要先编码,在接收处理前要进行解码。所以在服务端代码中,定义getData方法是,当中的input没又进行编码是没法进行input == 'help'这种判断的:1、数据类型不同。在没编码前,input当中寄存的数据类型是字节,而’help’是字符格式。2、在输入的时候我们会按下回车键,在数据类型是字节的情况下,按下回车键汇编转义成’\r\n’(回车+换行),而右边没有。
  4. 想把一个方法进行重复利用,比较好的方法是把这个方法定义成函数。这样不会让函数某一段看起来过于冗长,服务器中对getData(用于接收客户端发来数据,并进行一些反馈)的定义,这样handle函数的定义看起来不会太臃肿。客户端中对getLastData定义,把收到的数据进行切片,取最后一段是这次任务三个函数都要进行的部分,单独定成一个函数比重复写语句简洁
  5. Split()方法可以把接收到的数据进行切片,切成数据类型是数组结构是数组,()里不填就是按系统默认的进行切割。也可以自己根据数据结构添加切割参照,像空格的多的可以用空格作为参照。

 

过程中出现的问题:

  1. 套接字方法send,没法把数据发送出去。
  2. 客户端中是定义CmdInterface方法并threading开通线程来发送数据的,开线程意义是什么(包含threading的用法。)?多线程是让多个客户端能通是连接一个服务端?
  3. Connect,exit是要定义两种方法处理,因为exit得到的数据还要切掉“{”和“}”。分支判断依据是什么?
  4. 在定义getexitData方法时,由于切割了两次,打印出来的除了500,还有一个空格。如何去掉空格?
  5. 切片split的具体参数是?

解决方案:

 客户端代码截图:

  1. 因为服务端是用readline()来读取客户端发来的数据,ReadLine是一整行来读取数据的,而我们用send来发送数据,缺少终止的标志。ReadLine由于没有接收到终止的标志,于是就会不停的接收数据。在要发送的数据后面加上+‘\r\n’就行了。
  2. 开线程是为了把发送数据和接收数据分成子线程和主线程,如果把接收数据和发送数据放在同一个while True里,就会有两个断点。增加了程序运行的不稳定性。开线程可以减少运行时间,Threading是一个空间,thread是其中的一个方法Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行。
  3. 从切片入手,我们要得到的都是最后一块。只是需要的精度不同。所以把两者其中一个的最后一块拿出来对比就行了,方法就用已经定义好的getLastData函数。期间自己犯的错误是,把判断值是否相等写成了赋值语句。
  4. 目前自己找出的指标不治本的方法:切片完了,字符串变成了数组的形式。那么在打印的时候,指定具体个体就行了。打印500这个值的语句就可以写成print(rdata[0])。(期间做过实验,exit得到的数据的第一次切割得到的结果是['','500} '],貌似每次切割,都会在切割那端生成一个空格。)

 第三次总结

第三次总结

相关文章: