簡體   English   中英

文件傳輸Java后關閉ServerSocket時出錯

[英]Error closing ServerSocket after file transfer Java

我有下面的代碼當我沒有close ServerSocket語句時,我收到一條錯誤消息,說它是資源泄漏,但是當我添加close語句時,Eclipse告訴我代碼無法訪問,如何更改代碼以關閉外部套接字while語句中的?

serverSocket = new ServerSocket(ServerPort);
    File incomingFile = new File("testfile.txt");

    while (true) {
        System.out.println("Waiting For File");
        Socket incomingSocket = serverSocket.accept();
        byte[] mybytearray = new byte[(int) incomingFile.length()];
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream(incomingFile));
        bis.read(mybytearray, 0, mybytearray.length);
        bis.close();
        OutputStream os = incomingSocket.getOutputStream();
        os.write(mybytearray, 0, mybytearray.length);
        os.flush();
        if (incomingSocket != null) {
            incomingSocket.close();
        }

    }
    if(serverSocket != null) {
        serverSocket.close();
    }

防止資源泄漏的正確方法是使用try..finally

    serverSocket = new ServerSocket(serverPort);
    try {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    } finally {
        serverSocket.close();
    }

或像這樣使用try-with-resources構造

    try (serverSocket = new ServerSocket(serverPort)) {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    }

代碼無法訪問的原因是您的while循環未終止。 還要注意,在代碼中的那一點, serverSocket不能為null,因為除非拋出異常,否則構造函數必須始終導致新實例。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM