Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 22, 2018 14:46:53

rugo
Зарегистрирован: 2018-09-18
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

Запуск двух потоков для приема UDP и TCP подключений

Есть такая проблема. Нужно запустить одновременно сервер UDP и сервер TCP. В одном скрипте. По одному они запускаются. Вместе пытаюсь запустить через потоки. Но поток TCP запускается, но почему-то не вызывается метод при приеме сообщений.
UDP-сервер всегда запускается и работает. TCP принимает только я не буду создавать поток syslog_thread.
В чем может быть проблема?

 import socketserver
import logging
import threading
from logging.handlers import TimedRotatingFileHandler
class TCPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        print('222')
        # self.request is the TCP socket connected to the client
        self.data = self.request.recv(1024).strip()
        logger.info(f'connect from {self.client_address[0]}')
        #print "{} wrote:".format(self.client_address[0])
        #print self.data
        # just send back the same data, but upper-cased
        #self.request.sendall(self.data.upper())
class SyslogUDPHandler(socketserver.BaseRequestHandler):
    def handle(self):
        #logger.debug(f'{str(self.request)}')
        #logger.debug(f'{str(self.request[0])}')
        #logger.debug(f'{str(self.request[1])}')
        data = str(bytes.decode(self.request[0].strip()))
        #print(data)
        #string = str(data)
        #print(string)
        if (data.find('cmd /usr/sbin/ntpdate') == -1 and data.find('time server') == -1 and data.find('Client thread started') == -1):
            logger.debug(f'{self.client_address[0]} {data}')
        #data = bytes.decode(self.request[0].strip(), encoding="utf-8")
        #socket = self.request[1]
        #print( "%s : " % self.client_address[0], str(data))
        #logger.debug(f'{self.client_address[0]} {str(data)}')
try:
    serverUDP = socketserver.UDPServer(("0.0.0.0",514), SyslogUDPHandler)
    serverTCP = socketserver.TCPServer(("0.0.0.0",6109), TCPHandler)
    syslog_thread = threading.Thread(target=serverUDP.serve_forever())    
    tcp_thread = threading.Thread(target=serverTCP.serve_forever())    
    syslog_thread.start()
    tcp_thread.start()
except (IOError, SystemExit):
        raise
except KeyboardInterrupt:
    logger.debug('exit from syslog server')

Отредактировано rugo (Ноя. 22, 2018 14:47:16)

Офлайн

#2 Ноя. 22, 2018 16:12:22

rugo
Зарегистрирован: 2018-09-18
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

Запуск двух потоков для приема UDP и TCP подключений

Разобрался сам.

Офлайн

#3 Ноя. 22, 2018 16:19:19

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Запуск двух потоков для приема UDP и TCP подключений

имхо тут лучше асинхронка, делал такое на торнадо
http://www.cyberforum.ru/python-network/thread2186958.html#post12106149

Отредактировано vic57 (Ноя. 22, 2018 16:19:34)

Офлайн

#4 Ноя. 22, 2018 16:33:03

rugo
Зарегистрирован: 2018-09-18
Сообщения: 9
Репутация: +  1  -
Профиль   Отправить e-mail  

Запуск двух потоков для приема UDP и TCP подключений

Я пока udp запускаю в потоке, а tcp классическим образом serve_forever()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version