Перевод двоичный файл массив байтов, используя TCP в Java
Я пытаюсь передать двоичный файл с сервера на клиент блоками байтов за один раз. Тем не менее, у меня есть проблема, где он застрял на передаче 8kb. Размер файла обычно превышает 1 Мб, а размер массива байтов-1024. Я считаю, что он должен что-то делать с моим циклом while, так как он не закрывает мое соединение. Помощь есть? Спасибо
Клиент
import java.io.*;
import java.net.Socket;
public class FileClient {
public static void main(String[] argv) throws IOException {
Socket sock = new Socket("localhost", 4444);
InputStream is = null;
FileOutputStream fos = null;
byte[] mybytearray = new byte[1024];
try {
is = sock.getInputStream();
fos = new FileOutputStream("myfile.pdf");
int count;
while ((count = is.read(mybytearray)) >= 0) {
fos.write(mybytearray, 0, count);
}
} finally {
fos.close();
is.close();
sock.close();
}
}
}
Сервер
import java.net.*;
import java.io.*;
public class FileServer {
public static void main(String[] args) throws IOException {
ServerSocket servsock = new ServerSocket(4444);
File myFile = new File("myfile.pdf");
FileInputStream fis = null;
OutputStream os = null;
while (true) {
Socket sock = servsock.accept();
try {
byte[] mybytearray = new byte[1024];
fis = new FileInputStream(myFile);
os = sock.getOutputStream();
int count;
while ((count = fis.read(mybytearray)) >= 0) {
os.write(mybytearray, 0, count);
}
os.flush();
} finally {
fis.close();
os.close();
sock.close();
System.out.println("Socket closed");
}
}
}
}