黑马程序员技术交流社区

标题: socket为什么要shutdown [打印本页]

作者: edithe    时间: 2015-6-1 23:10
标题: socket为什么要shutdown
我在写TCP的客户端与服务端的时候
如果要服务端回送消息,那么在客户端发送完毕后要shutdownOutput,
如果没有这句代码,则不能接受服务端返回的数据,视频中说是这句代码的话服务端不知道客户端是否发送完毕,所以一直在等待,这个相信大家都自动
  1. //客户端
  2.         @Test
  3.         public   void client() {
  4.                 Socket socket = null;
  5.                 OutputStream os = null;
  6.                 InputStream is = null;
  7.                 try {
  8.                         socket = new Socket(InetAddress.getByName("192.168.1.16"), 8989);
  9.                         os = socket.getOutputStream();       
  10.                         //发送消息
  11.                         os.write("收到没".getBytes());
  12.                         //告诉服务端这边发送完毕
  13.                         socket.shutdownOutput();//====================没有这句下面的代码不能运行
  14.                         //建立输入流,输入服务端发来的消息
  15.                         is = socket.getInputStream();
  16.                         byte[] buf = new byte[20];
  17.                         int len= 0;
  18.                         while((len = is.read(buf))!=-1){
  19.                                 System.out.println(new String(buf,0,len));
  20.                         }
  21.                 } catch (UnknownHostException e) {
  22.                         // TODO Auto-generated catch block
  23.                         e.printStackTrace();
  24.                 } catch (IOException e) {
  25.                         // TODO Auto-generated catch block
  26.                         e.printStackTrace();
  27.                 } finally {
  28.                         if (socket != null) {
  29.                                 try {
  30.                                         socket.close();
  31.                                 } catch (IOException e) {
  32.                                         // TODO Auto-generated catch block
  33.                                         e.printStackTrace();
  34.                                 }
  35.                         }
  36.                 }
  37.         }
复制代码


但是今天看到一个不用socket.shutdownOutput();  也能接受服务端返回的数据
  1. public class Demo1Client {
  2.        
  3.         public static void main(String[] args) throws Exception {
  4.                 Socket  socket = new Socket(InetAddress.getLocalHost(), 9090);
  5.                 String data = "这个是我第一个tcp的例子";
  6.                 OutputStream out = socket.getOutputStream();
  7.                 out.write(data.getBytes());               
  8.                
  9.                 //客户端要接收服务端回送的数据
  10.                 InputStream inputStream  = socket.getInputStream();
  11.                 byte[] buf = new byte[1024];
  12.                 int length =inputStream.read(buf);
  13.                 System.out.println("客户端接收到的内容是:"+ new String(buf,0,length));
  14.                 socket.close();
  15.         }
  16. }
复制代码

一直没搞明白,请问这是为什么呢






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