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.
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()