Я пишу TCP-сервер и клиент, в котором клиент отправит файл, и сервер сохранит его. Мой посыл/функция сохранения следующим образом:SocketException при чтении файла с помощью BufferedInputStream
Сервер
public void saveFile2(Socket clientSocket) throws IOException
{
BufferedInputStream bis = new BufferedInputStream(clientSocket.getInputStream());
DataInputStream dis = new DataInputStream(bis);
String fileName = dis.readUTF();
File file = new File(fileName);
FileOutputStream fos = new FileOutputStream(file);
BufferedOutputStream bos = new BufferedOutputStream(fos);
int byteCount;
byte[] buffer = new byte[4096];
while ((byteCount = bis.read(buffer, 0, buffer.length)) > 0)
{
System.out.println("Test byteCount = "+byteCount);
bos.write(buffer, 0, byteCount);
break;
}
System.out.println("Saved file"+file.getName());
bos.close();
dis.close();
}
Client
public void sendFile2(String xmlpath) throws IOException, InterruptedException
{
BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
DataOutputStream dos = new DataOutputStream(bos);
File file = new File(xmlpath);
System.out.println("Sending File : " + file.getName());
dos.writeUTF(file.getName());
FileInputStream fis = new FileInputStream(file);
BufferedInputStream bis = new BufferedInputStream(fis);
int bytesCount;
byte[] buffer = new byte[4096];
System.out.println("Sending file to server.");
while ((bytesCount = fis.read(buffer)) > 0)
{
System.out.println(bytesCount);
bos.write(buffer, 0, bytesCount);
}
System.out.println("Finished sending.");
bis.close();
dos.flush();
}
Обратите внимание, что я добавил перерыв; команду в цикл while сервера, и программа работает отлично. Но когда я исключаю, я получаю это исключение:
Test byteCount = 394
java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:209)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:246)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:286)
at java.io.BufferedInputStream.read(BufferedInputStream.java:345)
at xml.xmlServer.saveFile2(xmlServer.java:72)
at xml.xmlServer.run(xmlServer.java:31)
Это может произойти только тогда, когда я включаю BufferedInputStream и BufferedOutputStream в моем коде. Может ли кто-нибудь помочь мне объяснить, что вызывает это исключение?