发送多张图片进行区分
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();
}
}
}
我用的第一个。代码如下:
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();
}
}
}
相关文章推荐
- 发送单张图片时解决打开问题
- Linux学习笔记(十一)-系统安全篇…
- Linux学习笔记(十)-服务器配置篇…
- Linux学习笔记(九)-服务器配置篇…
- Linux学习笔记(八)-程序开发篇之…
- Ubuntu安装中文输入法
- BZOJ3679: 数字之积
- Springframework(一)spring基础概念介绍
- Linux学习笔记(七)-网络篇和多媒…
- Linux学习笔记(六)-系统管理篇之…
- Linux学习笔记(五)-系统管理篇之…
- Linux学习笔记(四)-系统管理篇之…
- NTFS和FAT文件系统的区别
- 先装linux后装windows的双系…
- JAVA中关闭OutputStream
- Linux学习笔记(三)—系统管理篇之…
- Linux学习笔记(二)-系统管理篇之…
- JAVA中修饰符类型的区别
- JAVA线程生命周期
- JAVA线程引起的CPU满负载