您的位置:首页 > 其它

发送多张图片进行区分

2016-03-23 12:48 411 查看
当发送多张图片的时候,接收端很容易将几个数据流混在了一起,导致接收的无法分开。常见的方法是先传文件大小,再传文件。或者自定义结束符,当接收到结束符后客户端自动区分开各个文件。
我用的第一个。代码如下:

server端:

for(int i=0;i<2;i++)
{
 
  try {
  
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));
     
   while(num!=-1)
{
sendStream.write(buffer, 0,num);
sendStream.flush();
num=input.read(buffer);
}
//      
     
    sendStream.write('\r');
     
    sendStream.write('\n');
     
   
     
    sendStream.flush();
     
 input.close();
 } catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}

client端:

while(true)
 {
i++;
if(i==3)
{
break;
}
 
 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());
System.out.println("即将接收的图片大小为: "+size);
 
   
RandomAccessFile recv = new RandomAccessFile(file,"rw");
   int num =
mess.read(buffer);
int RecvSize=0;
while(num!=-1&&(RecvSize
   {
 
RecvSize+=num;
recv.write(buffer,0,num);
   
recv.skipBytes(num);
   
num=mess.read(buffer);
//    
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();
}
}
 } catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
   
 }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: