发送多张图片进行区分

在发送多张图片时,为了防止接收端混淆数据流,可以先发送每张图片的大小,然后传输图片内容。服务器端通过读取文件并发送其长度,客户端根据接收到的长度来区分并保存每个文件。代码示例展示了如何实现这一过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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();
}
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值