Connecting to multiple ports using socketserver python

Ok, trying to port some C ++ code to python. For this particular case, I need to configure a TCP / IP server to receive communication over several ports. In the old C ++ code, several casyncsocket instances are created corresponding to each port.

I would like to do the same using python 3. Looking through other examples, I tried to modify them to work. I have added a few extra lines below to try connecting to ports 1520 and 1525.

#!/usr/bin/env python


import socketserver
from threading import Thread

class service(socketserver.BaseRequestHandler):
    def handle(self):
        data = 'dummy'
        print ("Client connected with ", self.client_address)
        while len(data):
            data = self.request.recv(1024)
            self.request.send(data)

        print ("Client exited")
        self.request.close()


class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass

t = ThreadedTCPServer(('',1520), service)


m = ThreadedTCPServer(('',1525), service)

t.serve_forever()
m.serve_forever()

I get errors whenever I run the above. If i pull out

m = ThreadedTCPServer(('',1525), service)
m.serve_forever()

Then it works great. I'm new to socket and python programming and you are not very lucky to find examples. Any help is appreciated.

Updated:

Well, it looks like I found a working solution.

import threading
import socketserver


class Datahandler(socketserver.BaseRequestHandler):
    def handle(self):
        self.data = self.request.recv(2048)

        if self.data:
            self.request.sendall(self.data)


class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    pass


def main():
    global TDC_servers
    global TDC_server_threads

    TDC_servers = []
    TDC_server_threads =[]

    TDC_servers.append(ThreadedTCPServer(('', 1520), Datahandler))
    TDC_servers.append(ThreadedTCPServer(('', 1525), Datahandler))

    for TDC_server in TDC_servers:
        TDC_server_threads.append(threading.Thread(target=TDC_server.serve_forever))

    for TDC_server_thread in TDC_server_threads:
        TDC_server_thread.setDaemon(True)
        TDC_server_thread.start()

    while True:
        continue


if __name__ == '__main__':
    try:
        main()


    finally:
        print('quitting servers')

        for TDC_server in TDC_servers:
            TDC_server.server_close()
+4

Source: https://habr.com/ru/post/1627866/


All Articles