您的位置:首页 > 其它

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

2016-03-23 12:48 267 查看
发送单张图片后要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(new
BufferedOutputStream(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=new
DataInputStream(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();
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: