繁体   English   中英

数据输入流

[英]DataInputStream

我在服务器端有以下代码:

服务器端:

 ServerSocket listenTransferSocket = new ServerSocket(6000);
          Socket connectionTransferSocket = listenTransferSocket.accept();

     DataOutputStream outTransferToClient =
         new DataOutputStream(connectionTransferSocket.getOutputStream());
        {
    .......................   (Some code)
    .......................
           }
    outTransferToClient.write(fileInBytes,0,numOfBytes);
           System.out.println("File send");
       **// outTransferToClient.close();**

        BufferedReader inFromClientR =
                 new BufferedReader(new InputStreamReader(connectionTransferSocket.getInputStream()));

客户端:

Socket fileTransferSocket = new Socket("localhost",6000);
     DataInputStream in = new DataInputStream(new BufferedInputStream(
                                                 fileTransferSocket.getInputStream()));

OutputStream out = new FileOutputStream(new File("./TransferedFiles/"+fileName));

byte[] by = new byte[numOfBytes];

while ((read = in.read(by, 0, numOfBytes)) != -1) {

       out.write(by,0,read); 
   }

  DataOutputStream outToServerR = 
       new DataOutputStream(fileTransferSocket.getOutputStream()); 
     System.out.println("checkC");
        outToServerR.writeBytes("Transfer completed \n");

如果我关闭它,当我尝试打开BufferedReader时出现以下异常:outTransferToClient.close();

Exception in thread "main" java.net.SocketException: Socket is closed
        at java.net.Socket.getInputStream(Socket.java:788)
        at Server.main(Server.java:92)

如果我没有在客户端的while循环永远不会停止..任何帮助吗????

DataOutputStream扩展了具有close()方法的FilterOutputStream

来自文档

Closes this output stream and releases any system resources associated with the stream.
The close method of FilterOutputStream calls its flush method, and then calls the close method of its underlying output stream.

另外,在finally块中使用类似close()的方法始终是一种不错的做法

是的,关闭DataOutputStream关闭基础OutputStream DataOutputStream#close()的Javadoc指出:

FilterOutputStream的close方法调用其flush方法,然后调用其基础输出流的close方法。

另外, 用于SocketJavadoc指出,当您关闭SocketinputStreamoutputStream ,它还将关闭关联的套接字。

因此,在关闭包装了其中一个流的DataOutputStream之后,您将无法重用该套接字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM