Выпуск
Я подтвердил с помощью анализатора пакетов, что все данные, поступающие от клиента, отправляются полностью и что данные, принимаемые сервером, также полны, однако существует небольшая проблема.
Вот базовое представление соответствующих частей клиентского потока на сервере.
this.data_in = new DataInputStream(sock.getInputStream());
this.in = new InputStreamReader(this.data_in);
Сервер будет считывать данные аутентификации, используя BufferedReader, и после завершения аутентификации он будет читать данные из сокета, например, так. Переменная 'fos' представляет собой FileOutputStream, в который записываются данные DataInputStream.
int read = 0;
byte[] buffer = new byte[8192];
while((read = data_in.read(buffer)) != -1) {
fos.write(buffer, 0, read);
bytes_received += read;
}
Это все кажется правильным в концепции, однако на практике первые 1450 байтов прочитанного файла отсутствуют. Я попытался использовать новый DataInputStream (sock.getInputStream ()) на случай, если позиция в потоке была странной, но все же не повезло. Спасибо за любую помощь!
Обновление 1
Чтобы я мог использовать функциональность BufferedReader, я сделал метод для чтения в строковых строках, как я использовал их раньше. Смотрите ниже код.
int input;
boolean run = true;
while((input = in.read()) != -1 && run) {
run = true;
char[] chars = Character.toChars(input);
for(char c : chars) {
if(c == '\n') {
run = false;
break;
} else if(c != '\r') {
sb.append(c);
}
}
}
Каким бы прекрасным ни казалось решение, все еще отсутствует 1450 байт информации. Может быть, я иду в неправильном направлении здесь?