Найти - Пользователи
Полная версия: Запуск двух потоков для приема UDP и TCP подключений
Начало » Python для новичков » Запуск двух потоков для приема UDP и TCP подключений
1
rugo
Есть такая проблема. Нужно запустить одновременно сервер 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
Разобрался сам.
vic57
имхо тут лучше асинхронка, делал такое на торнадо
http://www.cyberforum.ru/python-network/thread2186958.html#post12106149
rugo
Я пока udp запускаю в потоке, а tcp классическим образом serve_forever()
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB