发送单张图片时解决打开问题

来源:互联网 发布:假冒品牌淘宝介入后果 编辑:程序博客网 时间:2024/05/17 23:14
发送单张图片后要shutdownoutput,或者说用对输入流或者说输出流close()。甚至用将socket.close(),才能读出图片。但是想再给客户端发信息就没办法了。
  解决方案:
  1、服务器端首先发送此图片大小,再发\n结尾
  2、客户端接收到大小后,将byte数组设置为1,计算循环次数。当次数为接收到的大小时退出循环
server端:
 File file = new File(path);
FileInputStream input = new FileInputStream(file);
 
byte[] buffer=new byte[6000];
try {
writer.println((int) file.length());
writer.flush();
int num= input.read(buffer);
OutputStream output = ClientSocket.getOutputStream();
OutputStream sendStream = new DataOutputStream(newBufferedOutputStream(output));
 
// sendStream.write(int) file.length());
 
 
while(num!=-1)
{
sendStream.write(buffer, 0,num);
sendStream.flush();
num=input.read(buffer);
}
 
       
              sendStream.write('\r');
  sendStream.write('\n');
 
  sendStream.flush();
  input.close();




客户端:
 byte[] buffer = new byte[1];
       File file= new File("test.jpg");
       file.createNewFile();
       
       InputStream input =socket.getInputStream();
   InputStream mess=newDataInputStream(new BufferedInputStream(input));
  String size = 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("s:"+RecvSize);
     
   
System.out.print("i am out");
System.out.println("共收到: "+RecvSize);
recv.close();
0 0
原创粉丝点击