java - Отправка строки после файла в том же сокете - PullRequest
0 голосов
/ 06 августа 2020

Я отправляю строку через сокет, в который ранее отправлял файл, но получатель читает ее как часть самого файла, есть ли способ отправить своего рода EOF перед отправкой строки?

Для отправки файла я использую

byte[] buffer = new byte[1024];
int count;
while ((count = fis.read(buffer)) >= 0) os.write(buffer, 0, count);
os.flush();

(и почти то же самое для его получения)

Для отправки строки я использую OutputStreamWriter

( Вот мой код: hatebin )

Я также читал здесь , что я должен отправить символ SOH, но какой из них я должен отправить и как?

Заранее спасибо.

1 Ответ

1 голос
/ 06 августа 2020

Нет, нет возможности отправить «eof», а затем что-то отправить.

Если вы не хотите открывать новое соединение, есть два основных способа решить эту проблему.

  • Вы можете изменить клиент, чтобы он распознавал некоторую особую последовательность байтов как «разделитель» и прекращал запись в файл, когда считывал разделитель из сокета. В этом случае вам нужно иметь некоторую стратегию, чтобы иметь дело с возможностью того, что файл действительно содержит разделитель.
  • Вы можете отправить размер файла в байтах перед отправкой файла и изменить клиента, чтобы он считался количество байтов, которые он читает из сокета. Когда клиент прочитает достаточно, он должен прекратить запись в файл.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...