Я делаю что-то вроде этого:
Server -send Command
Сервер-отправить файл
Клиент подтверждает файл успешно
Команда Server -send
Сервер-отправить файл
Клиент-подтверждает файл успешно
...
вот так ... Предположим, у вас есть сокет от клиента, чем вы ...
socket.getOutputStream.write ("ФАЙЛ: SomeFile.bin, РАЗМЕР: 872973493 \ r \ n" .getBytes ("выберите кодировку"))
socket.getOutputStream.flush (); (вам нужно будет выполнить сброс только в том случае, если вы ожидаете ответа от строки сервера, например: ОК, ОТПРАВЬТЕ ФАЙЛ, IM ГОТОВ, в противном случае тоже не нужно)
клиент читает и видит, что это файл, и он имеет размер в байтах, поэтому он начинает чтение из socket.getInputStream, пока не получит ожидаемую длину файла.
после этого клиенты подтверждают, что он получил файл
тогда сервер может отправить другой файл, вы можете сделать вместо ФАЙЛА, использовать ИЗОБРАЖЕНИЕ: или что угодно. Вам просто нужно прочитать сообщение со стороны клиента, чтобы увидеть, является ли это файл или изображение
Вот некоторые функции, которые могут вам помочь:
public static void readInputStreamToFile(InputStream is, FileOutputStream fout,
long size, int bufferSize) throws Exception
{
byte[] buffer = new byte[bufferSize];
long curRead = 0;
long totalRead = 0;
long sizeToRead = size;
while(totalRead < sizeToRead)
{
if(totalRead + buffer.length <= sizeToRead)
{
curRead = is.read(buffer);
}
else
{
curRead = is.read(buffer, 0, (int)(sizeToRead - totalRead));
}
totalRead = totalRead + curRead;
fout.write(buffer, 0, (int) curRead);
}
}
public static void writeFileInputStreamToOutputStream(FileInputStream in, OutputStream out, int bufferSize) throws Exception
{
byte[] buffer = new byte[bufferSize];
int count = 0;
while((count = in.read(buffer)) != -1)
{
out.write(buffer, 0, count);
}
}