黑马程序员技术交流社区

标题: tcp上传图片s.shutdownOutput()求说明... [打印本页]

作者: lonely_zb    时间: 2013-9-2 20:49
标题: tcp上传图片s.shutdownOutput()求说明...
首先贴上我的代码:

客户端:
package com.mysoft.socket;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.*;
/**
* TCP上传图片
* @author bo
*
*/
public class PicClinet {

public static void main(String[] args) throws Exception {
  
  
  Socket s = new Socket("127.0.0.1",10007);
  
  FileInputStream fis = new FileInputStream("D:\\1.bmp");
  
  //将图片写到服务端
  OutputStream out = s.getOutputStream();
  
  byte[] buf = new byte[1024];
  
  int len =0;
  
  while((len=fis.read(buf))!=-1){
   out.write(buf,0,len);
  }
  
     //告诉服务端数据已经写完
  s.shutdownOutput();
  
     //接收服务端的返回信息
  InputStream in = s.getInputStream();
  
  byte[] bufIn = new byte[1024];
  
  int num = in.read(bufIn);
  
  System.out.println(new String(bufIn,0,num));
  
  fis.close();
  s.close();
}
}

服务端


package com.mysoft.socket;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class PicServer {

public static void main(String[] args) throws Exception {
  
  ServerSocket ss = new ServerSocket(10007);
  
  
  Socket s = ss.accept();
  
  //获取客户端写过来的信息
  InputStream in =  s.getInputStream();
  
  //指定上传的目的地
  FileOutputStream  fos = new FileOutputStream("server.bmp");
  
     //将上传的图片写入目的地
  byte[] buf = new byte[1024];
  
     int len = 0;
     
     while((len=in.read(buf))!=-1){
      fos.write(buf,0,len);
     }
     
     //返回客户端信息
     OutputStream  out =  s.getOutputStream();
     
     out.write("上传成功!".getBytes());
     
     fos.close();
     
     s.close();
     
     //只服务一次,所以关掉服务端
     ss.close();
}
}


在我第一次写程序运行的时候,图片是没有写进去,后面我看视频几次,发现了这个客户端中要加入   s.shutdownOutput(); 然后运行,图片就上传了,老师说是什么 阻塞住了,我不懂,这个方法为什么加上之后就可以了啊,图片用while循环写完之后,当然就结束了,为什么还会阻塞住,导致流读不到数据呢?






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2