解决方案 »

  1.   

    虽然在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInput和shutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。
      

  2.   

    流和Socket只有在你确定以后不再会用到时才会去close,你下次还要用当然不能close,否则你就只能重新连接了。
      

  3.   

    虽然在大多数的时候可以直接使用Socket类或输入输出流的close方法关闭网络连接,但有时我们只希望关闭OutputStream或InputStream,而在关闭输入输出流的同时,并不关闭网络连接。这就需要用到Socket类的另外两个方法:shutdownInput和shutdownOutput,这两个方法只关闭相应的输入、输出流,而它们并没有同时关闭网络连接的功能。和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:falseisOutputShutdown:falseisClosed:falseisInputShutdown:trueisOutputShutdown:falseisClosed:falseisInputShutdown:trueisOutputShutdown:trueisClosed:false从输出结果可以看出,isClosed方法一直返回false,因此,可以肯定,shutdownInput和shutdownOutput并不影响Socket对象的状态。