Форум сайта python.su
1
Есть такая проблема. Нужно запустить одновременно сервер 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)
Офлайн
1
Разобрался сам.
Офлайн
имхо тут лучше асинхронка, делал такое на торнадо
http://www.cyberforum.ru/python-network/thread2186958.html#post12106149
Отредактировано vic57 (Ноя. 22, 2018 16:19:34)
Офлайн
1
Я пока udp запускаю в потоке, а tcp классическим образом serve_forever()
Офлайн