У меня есть gui, где я нажимаю кнопку отправки на одном ПК и кнопку приема на другом ПК, и он отправляет файл. Проблема в том, что я могу только отправить файл один раз, а затем я должен перезапустить приложение.java - Может только отправить файл один раз
Причины, которые он дает для сбоя, следующие: «Розетка закрыта» на отправляющем ПК, хотя я не понимаю, почему она это скажет. «ArrayIndexOutOfBounds» на принимающем ПК.
У меня есть эти два метода, которые я использую для отправки данных:
public void StreamIn() throws Exception { //FOR RECEIVING FILES
byte[] mybytearray = new byte[size];
InputStream is = sock.getInputStream();
fos = new FileOutputStream(FILE_TO_RECEIVE);
bos = new BufferedOutputStream(fos);
bytesRead = is.read(mybytearray, 0, mybytearray.length);
current = bytesRead;
do {
bytesRead = is.read(mybytearray, current, (mybytearray.length - current));
if (bytesRead >= 0) current += bytesRead;
} while (bytesRead > -1);
bos.write(mybytearray, 0, current);
bos.flush();
if (fos != null) fos.close();
if (bos != null) bos.close();
}
public void StreamOut() throws Exception { //FOR SENDING FILES
fis = new FileInputStream(myFile);
bis = new BufferedInputStream(fis);
bis.read(mybytearray, 0, mybytearray.length);
os = sock.getOutputStream();
os.write(mybytearray, 0, mybytearray.length);
os.flush();
if (bis != null) bis.close();
if (os != null) os.close();
}
По какой-то причине OutputStream обыкновения писать второй раз, хотя я закрываю и воссоздать их, прежде чем пытаться отправить другой файл. Я не понимаю, почему посылающий компьютер скажет, что сокет закрыт.
Спасибо за ответ, но то, что «буфер» в этом коде? А также, я не могу читать без окончательного закрытия выходного потока. Это также закрывает розетку? – Sixtoo
Я вижу, что он закрывает сокет, а решение - использовать Socket.shutdownOutput() – Sixtoo
** edit ** не совсем решение: вы не можете повторно использовать выходной поток после этого – Sixtoo