Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //// СЕРВЕР
- #!/usr/bin/python
- import errno
- import threading
- import socket
- import logging
- import json
- HOST = ''
- PORT = 9090
- BIND_ADDRESS = (HOST, PORT)
- BACKLOG = 100
- logger = logging.getLogger('main')
- def handle(sock, clinet_ip, client_port):
- # обработчик, работающий в процессе-потомке
- logger.info('Start to process request from %s:%d' % (clinet_ip, client_port))
- # читаем данные
- in_buffer = b''
- in_buffer += sock.recv(1024)
- logger.info('In buffer: ' + repr(in_buffer))
- # декодированные данные
- decoded_array = json.loads(in_buffer.decode('utf-8'))
- print(decoded_array)
- # ответ клиенту
- try:
- result = "OK"
- except Exception as e:
- result = repr(e) # если словили исключение, сообщаем клиенту
- out_buffer = result.encode('utf-8') + b'\r\n'
- logger.info('Out buffer = ' + repr(out_buffer))
- # отправляем
- sock.sendall(out_buffer)
- sock.close()
- logger.info('Done.')
- def server_loop():
- sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # слушающий сокет
- sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # пример из docs.python.org/3/library/socket.html
- sock.bind((HOST, PORT))
- sock.listen(BACKLOG)
- # слушаем и при получении нового входящего соединения,
- # создаем новый thread, который будет его обрабатывать
- logger.info('Listning no %s:%d...' % (HOST, PORT))
- while True:
- try:
- connection, (client_ip, clinet_port) = sock.accept()
- except IOError as e:
- if e.errno == errno.EINTR:
- continue
- raise
- # запускаем нить
- thread = threading.Thread(
- target=handle,
- args=(connection, client_ip, clinet_port)
- )
- thread.daemon = True
- thread.start()
- def main():
- # настраиваем логгинг
- logger.setLevel(logging.DEBUG)
- ch = logging.StreamHandler()
- ch.setLevel(logging.DEBUG)
- formatter = logging.Formatter(
- '%(asctime)s [%(levelname)s] [%(thread)s] %(message)s',
- '%H:%M:%S'
- )
- ch.setFormatter(formatter)
- logger.addHandler(ch)
- logger.info('Run')
- # запускаем сервер
- server_loop()
- main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement