test.py 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import json
  4. import logging
  5. import socket
  6. import threading
  7. # 广播端口
  8. broadcast_port = 8888
  9. def listen_broadcast():
  10. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  11. s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
  12. client_info = json.dumps({
  13. 'hostname': 'kylin', 'mac_addr': '00:23:24:e4:f0:0b'
  14. })
  15. logging.info('broadcast info | %s' % client_info)
  16. s.sendto(client_info.encode('utf-8'), ('<broadcast>', broadcast_port))
  17. data, address = s.recvfrom(2048)
  18. # 获取服务端信息
  19. server_info = json.loads(data.decode('utf-8'))
  20. logging.info('recv from %s | %s' % (address[0], server_info))
  21. # 本地测试地址
  22. address = ('127.0.0.1',)
  23. # 连接服务器管理端
  24. threading.Thread(target=listen_socket, args=(address, server_info)).start()
  25. def listen_socket(server_address, server_info):
  26. client = socket.create_connection((server_address[0], int(server_info['manager_port'])))
  27. client_info = json.dumps({
  28. 'first': 'hello'
  29. })
  30. client.send(client_info.encode('utf-8'))
  31. while True:
  32. response = client.recv(2048)
  33. logging.info('recv from %s | %s' % (server_address[0], str(response.decode())))
  34. msg = input('enter some message: ')
  35. ret = {'data': msg}
  36. json_str = json.dumps(ret)
  37. client.send(json_str.encode('utf-8'))
  38. # noinspection DuplicatedCode
  39. def init_logging(log_filename):
  40. log_format = '%(asctime)s, %(filename)s - line %(lineno)-4d: %(levelname)-8s %(message)s'
  41. date_format = '%Y-%m-%d %H:%M:%S'
  42. # 打印到文件
  43. logging.basicConfig(filename=log_filename, level=logging.INFO, format=log_format, datefmt=date_format)
  44. formatter = logging.Formatter(fmt=log_format, datefmt=date_format)
  45. # 同时输出到终端
  46. console = logging.StreamHandler()
  47. console.setLevel(logging.INFO)
  48. console.setFormatter(formatter)
  49. logging.getLogger('').addHandler(console)
  50. if __name__ == '__main__':
  51. init_logging('client.log')
  52. threading.Thread(target=listen_broadcast).start()