我做这样的事情:
服务器 - 发送命令 服务器 - 发送文件 客户-confirms文件sucessfull
服务器 - 发送命令 服务器 - 发送文件 客户-confirms文件sucessfull 。 ..
像这样... supose你有一个客户端的套接字,比你...
socket.getOutputStream.write(“FILE:SomeFile.bin,SIZE:872973493 \ r \ n”.getBytes(“choose an encoding”)) socket.getOutputStream.flush(); (你只需要刷新,如果你期待的服务器字符串响应,如:OK发送我的文件,IM就绪,否则不需要) 客户端读取并看到这是一个文件,它有这个字节大小,所以它启动从socket.getInputStream读取,直到它获得预期的文件长度。 此客户端确认后,他收回文件
然后服务器可以发送另一个文件,你可以做,而不是FILE,使用IMAGE或任何你想要的。你只需要读取客户端的消息,看它是否是一个文件或图像
这里有一些功能,可以帮助你:
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);
}
}