1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import json
- import logging
- import socket
- import threading
- # 广播端口
- broadcast_port = 8888
- def listen_broadcast():
- s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
- s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
- client_info = json.dumps({
- 'hostname': 'kylin', 'mac_addr': '00:23:24:e4:f0:0b'
- })
- logging.info('broadcast info | %s' % client_info)
- s.sendto(client_info.encode('utf-8'), ('<broadcast>', broadcast_port))
- data, address = s.recvfrom(2048)
- # 获取服务端信息
- server_info = json.loads(data.decode('utf-8'))
- logging.info('recv from %s | %s' % (address[0], server_info))
- # 本地测试地址
- address = ('127.0.0.1',)
- # 连接服务器管理端
- threading.Thread(target=listen_socket, args=(address, server_info)).start()
- def listen_socket(server_address, server_info):
- client = socket.create_connection((server_address[0], int(server_info['manager_port'])))
- client_info = json.dumps({
- 'first': 'hello'
- })
- client.send(client_info.encode('utf-8'))
- while True:
- response = client.recv(2048)
- logging.info('recv from %s | %s' % (server_address[0], str(response.decode())))
- msg = input('enter some message: ')
- ret = {'data': msg}
- json_str = json.dumps(ret)
- client.send(json_str.encode('utf-8'))
- # noinspection DuplicatedCode
- def init_logging(log_filename):
- log_format = '%(asctime)s, %(filename)s - line %(lineno)-4d: %(levelname)-8s %(message)s'
- date_format = '%Y-%m-%d %H:%M:%S'
- # 打印到文件
- logging.basicConfig(filename=log_filename, level=logging.INFO, format=log_format, datefmt=date_format)
- formatter = logging.Formatter(fmt=log_format, datefmt=date_format)
- # 同时输出到终端
- console = logging.StreamHandler()
- console.setLevel(logging.INFO)
- console.setFormatter(formatter)
- logging.getLogger('').addHandler(console)
- if __name__ == '__main__':
- init_logging('client.log')
- threading.Thread(target=listen_broadcast).start()
|