摘要: #socketserver 是在socket基础上进行了封装,它让server可以实时跟多个client进行通信。 #thread线程:一个程序有一个线程,一个线程是调度cpu的最小单位。程序运行才产生线程,不运行就不产生。 #如果启用多个线程去接收多个client的请求,就能实现并发的效果。 # server: import socketserver class MyServer(socke... 阅读全文
posted @ 2019-08-27 13:22 梁劲雄 阅读(163) 评论(0) 推荐(0) 编辑
摘要: #如果客户端知道服务端的ip地址和端口,就可以连接服务端,信息不安全。 #使用os.urandam随机生成32位bytes,然后hmac加密之后再发送给客户端。 #server: import socket import hmac import os secret_key = b'daxiong' sk = socket.socket() sk.bind(('127.0.0.1',9002)) s 阅读全文
posted @ 2019-08-27 13:21 梁劲雄 阅读(127) 评论(0) 推荐(0) 编辑
摘要: #在网络上面传输的数据叫数据包,数据包里面的数据叫报文,报文都有报头。 #报头可以包含文件路径、文件大小、文件名称等等。#当数据比较长,一次性发送会报错,需要分多次发送。#client端上传数据到server端,server端下载数据: #client端: import socket import 阅读全文
posted @ 2019-08-27 13:20 梁劲雄 阅读(131) 评论(0) 推荐(0) 编辑
摘要: #黏包现象:信息还没接收完,下一次接收的时候一下子接收好几条黏在一起的信息。 #黏包现象的原因:接收端不知道发送端发送的数据的长度。recv(字节数小了)。 # 第一次无法接收完就缓存起来,下一次接收。 #只有TCP才会黏包,UDP不会黏包。 #TCP的黏包现象: #server下发信息给多个client,控制它们干活。 #server端: import socket sk = socket.so 阅读全文
posted @ 2019-08-27 13:19 梁劲雄 阅读(131) 评论(0) 推荐(0) 编辑
摘要: #struct模块可以把一个数据类型,例如数字int,转化成固定长度(4个字节)的bytes。int转为4个bytes。 #在大量传输数据之前先告诉接收端即将接收数据的大小,方可解决黏包问题: #利用struct模块打包要发送的数据的长度,接收端接收这个包,解包之后,接收这个长度的数据。 import struct pack = struct.pack('i',4096) #打包,'i'代表int 阅读全文
posted @ 2019-08-27 13:19 梁劲雄 阅读(159) 评论(0) 推荐(0) 编辑