В настоящее время я работаю над простой синхронизацией файлов между клиентом и сервером .Для этого клиент и сервер следуют простому протоколу , который определяет, в каком порядке отправляются сообщения.
сокращенный протокол (с использованием Object / ByteArrayStreams):
Цикл клиента:
- Отправить имя файла
- Отправить информацию о файле
- Отправить данные
- Ожидание подтверждения сервера
Цикл сервера:
- Считать имя файла
- Считать информацию о файле
- Получить данные
- Отправить подтверждение клиенту
Повторить.
Проблема в том, что протокол выходит из строя, когда во время передачи возникает ошибка , а я обычно получаю StreamCorruptedExceptions
, так как по крайней мере одна сторона ожидает чего-то другого.
Вот пример ситуации, в которой возникла проблема: сбой сервера во время приема файла (3) по любой причине.Теперь сервер ждет имя файла.Из-за ошибки клиент прибывает в часть 3, отправляя данные.Затем создается исключение, поскольку сервер ожидает объект сообщения, а клиент отправляет байтовые данные.
Как лучше всего решить эту проблему?