fileserver.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from socket import socket, SOCK_STREAM, AF_INET
  2. from base64 import b64encode
  3. from json import dumps
  4. from threading import Thread
  5. def main():
  6. # 自定义线程类
  7. class FileTransferHandler(Thread):
  8. def __init__(self, cclient):
  9. super().__init__()
  10. self.cclient = cclient
  11. def run(self):
  12. my_dict = {}
  13. my_dict['filename'] = 'guido.jpg'
  14. # JSON是纯文本不能携带二进制数据
  15. # 所以图片的二进制数据要处理成base64编码
  16. my_dict['filedata'] = data
  17. # 通过dumps函数将字典处理成JSON字符串
  18. json_str = dumps(my_dict)
  19. # 发送JSON字符串
  20. self.cclient.send(json_str.encode('utf-8'))
  21. self.cclient.close()
  22. # 1.创建套接字对象并指定使用哪种传输服务
  23. server = socket()
  24. # 2.绑定IP地址和端口(区分不同的服务)
  25. server.bind(('192.168.1.2', 5566))
  26. # 3.开启监听 - 监听客户端连接到服务器
  27. server.listen(512)
  28. print('服务器启动开始监听...')
  29. with open('guido.jpg', 'rb') as f:
  30. # 将二进制数据处理成base64再解码成字符串
  31. data = b64encode(f.read()).decode('utf-8')
  32. while True:
  33. client, addr = server.accept()
  34. # 用一个字典(键值对)来保存要发送的各种数据
  35. # 待会可以将字典处理成JSON格式在网络上传递
  36. FileTransferHandler(client).start()
  37. if __name__ == '__main__':
  38. main()