A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 贾振凯 中级黑马   /  2013-3-28 22:55  /  3949 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 贾振凯 于 2013-3-30 20:47 编辑

当调用Socket中shutdownOutput()方法是不是在关闭输出流之前会发送一个 -1 作为结束标记给对方输入流???

点评

 建议你可以去19届交流区发帖;如果问题未解决,请继续追问回复者,如果问题已经解决,请将分类改为“已解决”,谢谢  发表于 2013-3-30 17:30

3 个回复

倒序浏览
应该没有返回,
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既不能输出数据,也不能读取数据而也.


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼主你的理解是对的,
回复 使用道具 举报

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));
        
}
}

评分

参与人数 1技术分 +1 收起 理由
scott0610 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马