Я пытаюсь собрать программу, в которой при добавлении файла с определенным именем программа отправляет данные этого файла на устройство в моей сети. Проблема в том, что устройство, на которое я пытаюсь отправить данные, обычно отключается. Это может привести к сбою моей программы. Я хочу, чтобы программа попыталась отправить данные на устройство, и, если это невозможно, дождаться повторного подключения устройства.
Вот моя программа:
import time, socket, os, sys, select, datetime
IP = '10.0.0.248'
LOGFILE = '/path/to/logfile.txt'
INFILE = '/path/to/datafile.txt'
def main():
while True:
try:
messages = []
sent = []
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((IP, 3011))
s.listen(1)
with open(LOGFILE, 'a') as logfile:
curr_datetime = datetime.datetime.now()
curr_time = '{}'.format(curr_datetime.strftime("%a, %d-%b-%Y %H:%M:%S"))
logfile.write(f'{curr_time}\tListening for connection on {IP}:{PORT}\n\n')
c, addr = s.accept()
with open(LOGFILE, 'a') as logfile:
logfile.write(f'Accepted connection from {addr}')
with open(INFILE, 'r') as infile:
for line in infile:
messages.append(line.strip('\n').strip('\'').strip('"'))
with open(INFILE, 'w') as infile:
infile.write('')
for message in messages:
try:
s.send(bytes(message, "utf-8"))
sent.append(message)
except KeyboardInterrupt:
s.close()
sys.exit()
except Exception as e:
with open(LOGFILE, 'a') as logfile:
logfile.write(f'Failed to send message {message} to {addr}: {e}')
pass
for message in sent:
del messages[messages.index(message)]
sent = []
except KeyboardInterrupt:
s.close()
sys.exit()
except Exception as e:
curr_datetime = datetime.datetime.now()
curr_time = '{}'.format(curr_datetime.strftime("%a, %d-%b-%Y %H:%M:%S"))
err_details = str('Error in line {}'.format(sys.exc_info()[-1].tb_lineno), type(e).__name__, e)
with open(LOGFILE, 'a') as logfile:
logfile.write(f'{curr_time} - Exception: {e}\n\n')
pass
if __name__ == "__main__":
main()
Что мне нужно сделать по-другому, чтобы, когда клиентское соединение (устройство) отключалось от сокета, моя программа ожидала, пока устройство не подключится к нему? Любая помощь будет принята с благодарностью!