华南Faker

导航

 

模块 socketserver

模块 socketserver,可以通过该模块实现服务器端能连接多个客户端

 1 import socketserver
 2 class Myserver(socketserver.BaseRequestHandler):
 3     def handle(self):
 4         self.data = self.request.recv(1024).strip()
 5         print("{} wrote:".format(self.client_address[0]))
 6         print(self.data)
 7         self.request.sendall(self.data.upper())
 8 
 9 if __name__ == "__main__":
10     HOST, PORT = "127.0.0.1", 9999
11 
12     # 设置allow_reuse_address允许服务器重用地址
13     socketserver.TCPServer.allow_reuse_address = True
14     # 创建一个server, 将服务地址绑定到127.0.0.1:9999
15     server = socketserver.TCPServer((HOST, PORT),Myserver)
16     # 让server永远运行下去,除非强制停止程序
17 server.serve_forever()

需要解释的是 if __name__ == "__main__":

这段代码的意思是,只有自己运行自己的代码A时才执行自己的代码A,当某个程序导入本代码A时,代码A不会运行自己的主函数

参考文章如下:

https://www.zhihu.com/question/49136398

使用struct解决黏包

借助struct模块,我们知道长度数字可以被转换成一个标准大小的4字节数字。因此可以利用这个特点来预先发送数据长度。

发送时

接收时

先发送struct转换好的数据长度4字节

先接受4个字节使用struct转换成数字来获取要接收的数据长度

再发送数据

再按照长度接收数据

用法:

struct.pack('i',9999)

9999以‘i’模式进行转换为固定bytes长度

x=struct.unpack('i',head_len_bytes)[0]

将打包的数据恢复成原理的模样

模式如下:

模块hmac

hmac_obj = hmac.new(secret_key,send_str)

secret 为密钥

send_str为加密的内容

ret = hmac_obj.digest() #以二进制显示哈希

posted on 2019-07-21 14:42  华南Faker  阅读(95)  评论(0)    收藏  举报