У меня нет проблем с отправкой больших текстовых документов или других файлов через сокеты с помощью java-программы, но когда я пытаюсь отправить файл .jpg или другое изображение, я получаю java.net.SocketException: сброс соединения.
У меня не возникло никаких проблем при отправке текстового документа размером 229 КБ через сокет, но при попытке отправить изображение размером 89 КБ я получаю сообщение об ошибке.Я использую цикл while для чтения и записи файла.
Это часть рассматриваемого класса сервера (он называется EasyDataSend):
public EasyDataSend() throws IOException
{
port = 8080;
server = new ServerSocket(port);
socket = server.accept();
dataOutputStream = new DataOutputStream(socket.getOutputStream());
}
public void sendFile(String path) throws IOException
{
File file = new File(path);
InputStream fileInputStream = new FileInputStream(file);
OutputStream fileOutputStream = socket.getOutputStream();
byte[] bytes = new byte[16 * 1024];
int count;
while ((count = fileInputStream.read(bytes)) > 0)
{
fileOutputStream.write(bytes, 0, count);
}
fileOutputStream.close();
fileInputStream.close();
socket.close();
server.close();
}
И это часть класса клиента (имя EasyDataReceive):
public EasyDataReceive() throws UnknownHostException, IOException
{
ip = "127.0.0.1";
port = 8080;
socket = new Socket(ip,port);
}
public void receiveFile(String path) throws IOException, SocketException
{
File file = new File(path);
InputStream fileInputStream = socket.getInputStream();
OutputStream fileOutputStream = new FileOutputStream(file);
byte[] bytes = new byte[16*1024];
int count;
while ((count = fileInputStream.read(bytes)) > 0)
{
fileOutputStream.write(bytes, 0, count);
}
fileOutputStream.close();
fileInputStream.close();
socket.close();
}
Это ошибка, которую я получаю:
Исключение в потоке "main" java.net.SocketException: сброс соединения на java.net.SocketInputStream.read (Неизвестный источник) на java.net.SocketInputStream.read (неизвестный источник) в java.net.SocketInputStream.read (неизвестный источник) в EasyDataReceive.receiveFile (EasyDataReceive.java:111) в TesterClient.main (TesterClient.java:23)
Кроме того, строка 111 на самом деле является только началом цикла while в клиентском классе.Я не хотел вставлять весь класс в пост.Строка 23 является лишь частью класса тестирования, где я создаю объект EasyDataReceive.