Доброго времени суток, IT специалисты!
Передо мной стоит задача написать систему обновления для ПО, которое мы разрабатываем. ПО работает на промышленном компьютере на базе ОС Windows Embedded Standard 7. Систему приходится писать по причине того, что физического доступа к компьютеру на работающем объекте нет. Поэтому всем обновления придется проводить по локальной сети с АРМ оператора.
Идея состоит в следующем: написать удаленный проводник файлов. На панельном компьютере запустить сервер, который будет слушать входящие подключения. По командам от клиентского приложения сервер будет возвращать списки папок и файлов, удалять их, отправлять клиенту или принимать новые файлы от клиента и складывать по заданным путям.
На базе статьи по
ссылке был написан асинхронный сервер. Т.к. я новичок в сетевом программировании, то у меня возникает ряд вопросов:
1) как удерживать соединение между клиентом и сервером?
Т.е. как это должно выглядеть, чтобы сервер создал соединение по запросу от клиента и удерживал его, пока между ними идет обмен разнообразной информацией. В синхронной версии у меня соединение создается каждый раз когда начинается обмен, и завершается, когда обмен заканчивается.
Пример:
а) клиент отправляет серверу запрос на скачивание файла
б) сервер отправляет размер файла
в) клиент принимает размер файла и создает байтовый массив такого же размера для принятия файла
г) сервер отправляет массив байтов и завершает соединение
д) клиент принимает эту информацию в созданный ранее массив, после чего пишет его на диск в файл. А что будет если размер файла больше размера массива? Ведь массив создается в памяти, и если размер передаваемого файла больше ОЗУ клиента, то он в память просто не залезет. Как тогда быть?
В итоге получается что соединения постоянно создаются и завершаются.
2) как лучше всего передавать файлы между клиентом и сервером?
Так как сейчас это реализовано мне не очень нравится. Т.е. сначала передается размер файла, а уже затем сам файл.
Вот в этой
статьи с хабра вроде неплохая архитектура клиент-сервера на базе общей библиотеки. Но здесь вроде все синхронно. Извините, если сморозил глупость, пока опыта не хватает, чтобы написать нечто подобное.
А может, в моем случае и не нужен асинхронный сервер? Клиентов будет максимум 2.