Java 文件传输后关闭ServerSocket时出错

Java 文件传输后关闭ServerSocket时出错,java,file-transfer,serversocket,Java,File Transfer,Serversocket,我有下面的代码,当我没有close ServerSocket语句时,我收到一个错误,说这是一个资源泄漏,但当我添加close语句时,Eclipse告诉我代码无法访问,我如何更改代码以关闭while语句之外的套接字 serverSocket = new ServerSocket(ServerPort); File incomingFile = new File("testfile.txt"); while (true) { System.out.println("

我有下面的代码,当我没有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 (serverSocket = new ServerSocket(serverPort)) {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    }

代码无法访问的原因是
while
循环未终止。还要注意,
serverSocket
在代码中的该点不能为null,因为除非抛出异常,否则构造函数必须始终生成新实例。

防止资源泄漏的正确方法是使用
try..finally

    serverSocket = new ServerSocket(serverPort);
    try {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    } finally {
        serverSocket.close();
    }
或者使用
尝试使用资源
这样的构造

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

代码无法访问的原因是
while
循环未终止。还要注意,
serverSocket
在代码中的该点不能为null,因为除非抛出异常,否则构造函数必须始终生成新实例。

防止资源泄漏的正确方法是使用
try..finally

    serverSocket = new ServerSocket(serverPort);
    try {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    } finally {
        serverSocket.close();
    }
或者使用
尝试使用资源
这样的构造

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

代码无法访问的原因是
while
循环未终止。还要注意,
serverSocket
在代码中的该点不能为null,因为除非抛出异常,否则构造函数必须始终生成新实例。

防止资源泄漏的正确方法是使用
try..finally

    serverSocket = new ServerSocket(serverPort);
    try {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    } finally {
        serverSocket.close();
    }
或者使用
尝试使用资源
这样的构造

    try (serverSocket = new ServerSocket(serverPort)) {
        File incomingFile = new File("testfile.txt");
        while (true) {
            // your code
        }
    }
代码无法访问的原因是
while
循环未终止。还要注意,
serverSocket
在代码中的该点不能为null,因为除非抛出异常,否则构造函数必须始终生成新实例