急!socket传输多个图片,接收端没办法区分开各个图片

SnailRen 2014-02-13 04:03:34
RT。
server端向client端连续发送三个图片。client端接收时,无法正确的将数据分开。
已经弄了三天了都没搞清楚。跪求各位大神指点!

发送的规则为:
server发送每个图片之前,先发即将发送图片的大小,再发图片
client接收到即将接收的图片的大小后,开始接收图片数据。当接收到的数据量等于那个大小后,不再接收,等待接收第二次的图片。
核心代码如下:
server端:

while(true)
{
Socket ClientSocket;
ClientSocket = server.accept(); //接受
reader= new BufferedReader(new InputStreamReader(ClientSocket
.getInputStream()));
writer = new PrintWriter(ClientSocket.getOutputStream());
//图片路径
String[] str=new String[3];
str[0]="C:/Users/Administrator/Desktop/bloig/3.png";
str[1]="C:/Users/Administrator/Desktop/bloig/2.png";
str[2]="C:/Users/Administrator/Desktop/bloig/1.png";
for(int i=0;i<3;i++)
{

try {

File file = new File(str[i]);
FileInputStream input = new FileInputStream(file);
//首先发送文件长度
System.out.println(file.length());
writer.println(file.length());
writer.flush();

byte[] buffer=new byte[6000];

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);
}
input.close();
sendStream.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} catch (FileNotFoundException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}

client端核心代码:

while(true)
{
if(i==3)
{
break;
}

int size=Integer.parseInt(reader.readLine());
System.out.println("即将接收的图片大小为: "+size);

try {
byte[] buffer = new byte[6000];
File file= new File(i+".jpg");
file.createNewFile();

InputStream input = socket.getInputStream();
InputStream mess=new DataInputStream(new BufferedInputStream(input));
RandomAccessFile recv = new RandomAccessFile(file,"rw");

int num = mess.read(buffer);
int RecvSize=0;
while(num!=-1&&(RecvSize<size)) //这条判断语句没有起到监测接收到的数据量的大小的作用
{
RecvSize+=num;
recv.write(buffer,0,num);
recv.skipBytes(num);
num=mess.read(buffer);
System.out.print("test: "+RecvSize);
}
recv.close();
i++;

} catch (IOException e){
// TODO Auto-generated catch block
e.printStackTrace();
}
}
...全文
283 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
SnailRen 2014-02-14
  • 打赏
  • 举报
回复
引用 3 楼 yangqiu0928 的回复:
你这三个文件,是分三个文件流传递的。一个文件传流完事在传下一个。传递文件大小干嘛用?
但是不给大小的话,接收方接收的时候就把几个文件都合在第一个接收的文件里了,混在一起了。
阿芬 2014-02-14
  • 打赏
  • 举报
回复
帮你顶下吧
shayebuhui0 2014-02-14
  • 打赏
  • 举报
回复
你这三个文件,是分三个文件流传递的。一个文件传流完事在传下一个。传递文件大小干嘛用?
SnailRen 2014-02-14
  • 打赏
  • 举报
回复
引用 4 楼 huxing998 的回复:
帮你顶下吧
谢谢
SnailRen 2014-02-13
  • 打赏
  • 举报
回复
再顶一个
SnailRen 2014-02-13
  • 打赏
  • 举报
回复
自己顶一个,别沉啊

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧