黑马程序员技术交流社区

标题: Socket中shutdownOutput() [打印本页]

作者: 贾振凯    时间: 2013-3-28 22:55
标题: Socket中shutdownOutput()
本帖最后由 贾振凯 于 2013-3-30 20:47 编辑

当调用Socket中shutdownOutput()方法是不是在关闭输出流之前会发送一个 -1 作为结束标记给对方输入流???
作者: 余勇    时间: 2013-3-29 14:01
应该没有返回,
public void shutdownOutput()
                    throws IOException禁用此套接字的输出流。
对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。
如果在套接字上调用 shutdownOutput() 后写入套接字输出流,则该流将抛出 IOException。

只关闭Socket的输入流和输出流,用以表示输入或输出数据已经发送完毕

当调用shutdownInput()或shutdownOutpu()方法关闭Socket的输入流或输出流之后,该Socket处于“半关闭”状态。
Socket可通过方法,isInputShutdown()判断Socket是否处于半读状态(read-half),
通过方法isOutputShutdown()判断该Socket是否处于半写状态(read-half),
即使同一个Socket实例先后调用shutdownInput()\shutdownOutput()方法,
该Socket实例依然没有被关闭,只是该Socket既不能输出数据,也不能读取数据而也.



作者: VOIDMAIN    时间: 2013-3-29 17:53
楼主你的理解是对的,
作者: 王_强    时间: 2013-3-30 17:43

package com.nets;
import java.io.*;
import java.net.*;
public class PictureClient {
/**
  * 上传图片
  * 客户端:
  * 1.服务端点
  * 2.读取客户端已有的图片数据
  * 3.通过Socekt输出流将数据发给服务端
  * 4.读取服务端反馈信息
  * 5.关闭流资源
  *
  */
public static void main(String[] args) throws Exception{
    Socket s=new Socket(InetAddress.getLocalHost().getHostName(),10012);
        FileInputStream fis=new FileInputStream("1.jpg");
        OutputStream out=s.getOutputStream();
        
        byte[]buf=new byte[1024];
        int len=0;
        
        while((len=fis.read(buf))!=-1){
         out.write(buf,0,len);
        }
       //告诉服务端数据已写完,相当于发送-1,不然,服务端一直在接收客户端的数据,
        s.shutdownOutput();
        
        InputStream in=s.getInputStream();
        byte[]bufIn=new byte[1024];
        int num=in.read(buf);
        System.out.println(new String(buf,0,num));
        
}
}






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