import datetime
|
from pickle import GLOBAL
|
from socketserver import BaseRequestHandler, UDPServer
|
import time
|
import os, sys
|
|
|
# cudir,_ = os.path.split(__file__)
|
# file_folder = os.path.join(cudir,"saveUDPData")
|
|
# if not os.path.exists(file_folder):
|
# os.makedirs(file_folder)
|
# print(f"make a new folder: {file_folder}")
|
|
class PointCloudUDPRequestHandler(BaseRequestHandler):
|
|
def handle(self):
|
packet_threshold = self.server.packet_threshold
|
packed_count = self.server.packed_count
|
path = self.server.path
|
|
print(time.asctime(),' Got connection from {}, {}'.format(self.client_address, packed_count))
|
# Get message and client socket
|
msg, sock = self.request
|
time_tag = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M-%S')
|
f = open('{}/{}_packet{}.udp'.format(path,time_tag,packed_count), 'wb')
|
f.write(msg)
|
f.close()
|
self.server.packed_count += 1
|
self.server.udp_list.append(msg)
|
|
if packed_count >= packet_threshold:
|
UDPServer.server_close(self.server)
|
|
def udp_get_tool(microwaveHost,packetThreshold,deviceName,saveFolder,subFolder):
|
|
# host = ''
|
# host = '192.168.2.65' # use this host to get the udp data from microwave device
|
port = 9911
|
server =UDPServer((microwaveHost, port), PointCloudUDPRequestHandler)
|
|
|
if subFolder is not None:
|
path = os.path.join(saveFolder,subFolder)
|
else:
|
start = datetime.datetime.now()
|
path = os.path.join(saveFolder,f"{deviceName}-{start.strftime('%Y-%m-%d-%H-%M-%S')}")
|
if not os.path.exists(path):
|
os.makedirs(path)
|
|
server.path = os.path.abspath(path)
|
server.packet_threshold = packetThreshold
|
server.packed_count = 0
|
server.udp_list = []
|
|
print(time.asctime(),'Server started on port', port)
|
print('....')
|
print('ctrl-c to quit server.')
|
try:
|
server.serve_forever()
|
except KeyboardInterrupt:
|
server.server_close()
|
print(time.asctime(),"Server Stopped")
|
except:
|
server.server_close()
|
print(time.asctime(),"Server Stopped")
|
return server.udp_list
|
|
|
if __name__ == '__main__':
|
|
def help():
|
print("**************************ERROR**************************")
|
print("Usage: udp_get.py [MICROWAVEhost] [PACKETthreshold] [DEVICEname] [SAVEfolder] [SUBfolder")
|
print("EXAMPLE: udp_get.py 192.168.2.65 1000 pod1 ./manual_ply 60 \n")
|
exit(1)
|
|
if len(sys.argv) != 6:
|
help()
|
try:
|
MICROWAVEhost = str(sys.argv[1])
|
PACKETthreshold = int(sys.argv[2])
|
DEVICEname = str(sys.argv[3])
|
SAVEfolder = str(sys.argv[4])
|
SUBfolder = str(sys.argv[5])
|
|
|
except Exception as e:
|
print(e)
|
help()
|
|
udp_get_tool(MICROWAVEhost,PACKETthreshold,DEVICEname,SAVEfolder,SUBfolder)
|