当发送多张图片的时候,接收端很容易将几个数据流混在了一起,导致接收的无法分开。常见的方法是先传文件大小,再传文件。或者自定义结束符,当接收到结束符后客户端自动区分开各个文件。
try {
while(num!=-1)
sendStream.write('\n');
sendStream.flush();
input.close();
} catch (IOException e1) {
{
try {
byte[] buffer = new
byte[1];
File file= new File(i+".jpg");
file.createNewFile();
InputStream input =
socket.getInputStream();
InputStream mess=new
DataInputStream(new BufferedInputStream(input));
int
size=Integer.parseInt(reader.readLine());
int num =
mess.read(buffer);
{
recv.skipBytes(num);
num=mess.read(buffer);
}
} catch (IOException e1) {
}
我用的第一个。代码如下:
server端:
for(int i=0;i<2;i++)
{
File file = new File(str[i]);
FileInputStream input = new FileInputStream(file);
//首先发送文件长度
System.out.println(file.length());
writer.println((int) file.length());
writer.flush();
byte[] buffer=new byte[1];
try {
int num= input.read(buffer);
OutputStream output = ClientSocket.getOutputStream();
OutputStream sendStream = new DataOutputStream(new
BufferedOutputStream(output));
{
sendStream.write(buffer, 0,num);
sendStream.flush();
num=input.read(buffer);
}
//
sendStream.write('\r');
// TODO Auto-generated catch block
e1.printStackTrace();
}
client端:
while(true)
i++;
if(i==3)
{
break;
}
System.out.println("即将接收的图片大小为: "+size);
RandomAccessFile recv = new RandomAccessFile(file,"rw");
int RecvSize=0;
while(num!=-1&&(RecvSize
RecvSize+=num;
recv.write(buffer,0,num);
//
System.out.print("收到数据量: "+RecvSize);
System.out.print("i am out");
System.out.println("共收到: "+RecvSize);
recv.close();
} catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// TODO Auto-generated catch block
e1.printStackTrace();
}
}