简体   繁体   中英

java.net.ConnectException: Connection refused: connect when retrieving a file

I have been looking for ages now trying to figure out what is causing this error:

java.net.ConnectException: Connection refused: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.commons.net.ftp.FTPClient._openDataConnection_(FTPClient.java:920)
at org.apache.commons.net.ftp.FTPClient._retrieveFileStream(FTPClient.java:1980)
at org.apache.commons.net.ftp.FTPClient.retrieveFileStream(FTPClient.java:1967)
at me.ItsJasonn.Main.Core.init(Core.java:48)
at me.ItsJasonn.Main.Core$1.run(Core.java:21)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Just about a few minutes ago I realised it had something to do with permissions for the file or folder (not sure which one exactly).

I am connecting to my NAS FTP server that is located in my house and uses the local internet. Here is my code:

package me.ItsJasonn.Main;

import java.awt.EventQueue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

public class Core {
    private static ServerThread serverThread;

    public static void main(String args[]) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                Core core = new Core();
                core.init();
            }
        });
    }

    public void init() {
        new MainInstance(this);

        BufferedReader reader = null;
        String ip = null;

        Socket socket = null;
            try {
                FTPClient client = new FTPClient();
                try {
                    client.connect("xxx.xxx.xxx.xxx", 21);
                    client.login(Login.USERNAME, Login.PASSWORD);

                    client.enterLocalPassiveMode();
                    client.setFileTransferMode(FTP.ASCII_FILE_TYPE);
                    client.setFileType(FTP.ASCII_FILE_TYPE);

                    client.changeWorkingDirectory("homes");
                    client.changeWorkingDirectory("Jason");

                    System.out.println(client.printWorkingDirectory());

                    InputStream stream = client.retrieveFileStream("kingkongproperties.txt");
                    reader = new BufferedReader(new InputStreamReader(stream, "UTF-8"));
                    ip = reader.readLine();
                } catch (IOException e) {
                    e.printStackTrace();
                } finally {
                    if(reader != null) {
                        reader.close();
                    }

                    if(client.isConnected()) {
                        try {
                            client.logout();
                            client.disconnect();
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                    }
                }

                socket = new Socket(InetAddress.getByName(ip), 4321);

                serverThread = new ServerThread(socket);
                Thread start = new Thread(serverThread);
                start.start();
            } catch (IOException e) {
                try {
                    System.out.println("No server found. Trying again in 2 seconds...");

                    Thread.sleep(2000);
                    init();
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            }
    }

    public ServerThread getServerThread() {
        return serverThread;
    }
}

The ip you try to connect to, is the ip of your router. You either need to set up portforward to the nas, or connect locally to the nas address.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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