socket的shutdownInput和shutdownOutput

虽然在大多数的时候可以直接使用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:false isOutputShutdown:false isClosed:false isInputShutdown:true isOutputShutdown:false isClosed:false isInputShutdown:true isOutputShutdown:true isClosed:false 从输出结果可以看出,isClosed方法一直返回false,因此,可以肯定,shutdownInput和shutdownOutput并不影响Socket对象的状态

你可能感兴趣的:(java,网络,java)