socket的shutdownInput和shutdownOutput是干嘛用的

J2EE 码拜 10年前 (2015-04-15) 3405次浏览 0个评论

问题1:API中 shutdownInput的解释是“此套接字的输入流置于流的末尾”,但是不懂这句话是什么意思?什么时候要用到这个方法?
问题2:shutdownOutput的解释是“禁用此套接字的输出流”,那这不是跟close方法一个意思吗?有什么区别?什么时候要用到这个方法?
问题3:输入输出流的close方法,和socketclose方法,是在每一次完成输入输出工作后,都必须关闭吗?如果我是在做一个客服端跟服务器端的交互,从程序开始到程序结束要收发很多次数据,那么是没收发一次,close一次,还是将close放到最后,等将要程序结束了,才来关闭?

真心的求教,弄这个问题烦了好久了。至100分的谢意!

socket的shutdownInput和shutdownOutput是干嘛用的
虽然在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInputshutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。
socket的shutdownInput和shutdownOutput是干嘛用的
那这一句:“此套接字的输入流置于流的末尾”,是什么意思?
socket的shutdownInput和shutdownOutput是干嘛用的
20分
引用 2 楼 veid_f3 的回复:

那这一句:“此套接字的输入流置于流的末尾”,是什么意思?

就是说流已经读到了末尾,再没有数据可以读了,和你自己读到流末尾是相同效果,但这个方法还会将以后发过来的数据忽略掉。

socket的shutdownInput和shutdownOutput是干嘛用的
流和Socket只有在你确定以后不再会用到时才会去close,你下次还要用当然不能close,否则你就只能重新连接了。
socket的shutdownInput和shutdownOutput是干嘛用的
20分
虽然在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInputshutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。和isClosed、isConnected方法一样,Socket类也提供了两个方法来判断Socket对象的输入、输出流是否被关闭,这两个方法是isInputShutdown()和isOutputShutdown()。下面的代码演示了只关闭输入、输出流的过程:

package mysocket;

import java.net.*;

public class MyCloseConnection1
{
    public static void printState(Socket socket)
    {
        System.out.println("isInputShutdown:" + socket.isInputShutdown());
        System.out.println("isOutputShutdown:" + socket.isOutputShutdown());
        System.out.println("isClosed:" + socket.isClosed());
        System.out.println();
    }

    public static void main(String[] args) throws Exception
    {
        Socket socket = new Socket("www.ptpress.com.cn", 80);
        printState(socket);

        socket.shutdownInput();
        printState(socket);

        socket.shutdownOutput();
        printState(socket);
    }
}

在运行上面的代后,将得到如下的输出结果:

    isInputShutdown:false

isOutputShutdown:false

isClosed:false

isInputShutdown:true

isOutputShutdown:false

isClosed:false

isInputShutdown:true

isOutputShutdown:true

isClosed:false

从输出结果可以看出,isClosed方法一直返回false,因此,可以肯定,shutdownInputshutdownOutput并不影响Socket对象的状态。


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明socket的shutdownInput和shutdownOutput是干嘛用的
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!