Android无法连接到Windows FTP服务器始终使用与普通Java相同的凭据获得超时

问题描述

我试图通过我的android应用程序连接到在Windows机器上运行的FTP。我不确定出什么问题了,因为相同的代码可以在常规的Java项目中工作。

我的清单具有权限

<uses-permission android:name="android.permission.INTERNET"/>

一个片段运行连接代码。我已经尝试过apache和edtftpj,并且都有相同的问题。

Edtftpj

import com.enterprisedt.net.ftp.FTPConnectMode;
import com.enterprisedt.net.ftp.FTPException;
import com.enterprisedt.net.ftp.FileTransferClient;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
public class SecondFragment extends Fragment
{
    private Activity mainActivity;
    private EditText serverIPView,serverPortView;
    private EditText serverUsernameView,serverPasswordView;

    private Thread ftpThread = new Thread(new Runnable() {
        @Override
        public void run()
        {
              String serverHost = serverIPView.getText().toString();
              String serverPort = serverPortView.getText().toString();
              String username =serverUsernameView.getText().toString();
              String password = serverPasswordView.getText().toString();

            try {
                FileTransferClient client = new FileTransferClient();

                client.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);

                client.setRemoteHost("192.168.1.50");
                client.setRemotePort(21);
                client.setUserName(username);
                client.setPassword(password);

                Random rand = new Random();
                byte[] bytes = new byte[1000];
                rand.nextBytes(bytes);
                client.connect();
                OutputStream out = client.uploadStream("temp");
                long begin = System.nanoTime();
                out.write(bytes);
                long end = System.nanoTime();
                out.close();
                client.deleteFile("temp");
                client.disconnect();
                double time = (double)(end - begin) / 1000000000;
                Log.i("RunFTP",String.valueOf(time) + " seconds");

            } catch (IOException | FTPException e) {
                e.printStackTrace();
            }
        }
    });

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState)
    {
        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.fragment_second,container,false);
    }

    public void onViewCreated(@NonNull View view,Bundle savedInstanceState) {
        super.onViewCreated(view,savedInstanceState);
        mainActivity = getActivity();

        // get user text view of inputted server IP and port
        serverIPView = view.findViewById(R.id.ftpSelectedIP);
        serverPortView = view.findViewById(R.id.ftpSelectedPort);

        // get user text views of inputted server credentials
        serverUsernameView = view.findViewById(R.id.ftpSelectedUsername);
        serverPasswordView = view.findViewById(R.id.ftpSelectedPassword);

        Button runButton = view.findViewById(R.id.ftpRunButton);

        runButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ftpThread.start();
                try {
                    ftpThread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

Apache Commons:

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

import java.io.IOException;
import java.io.OutputStream;
import java.util.Random;
public class SecondFragment extends Fragment
{
    private Activity mainActivity;
    private EditText serverIPView,serverPasswordView;

    private Thread ftpThread = new Thread(new Runnable() {
        @Override
        public void run()
        {
              String username =serverUsernameView.getText().toString();
              String password = serverPasswordView.getText().toString();

            FTPClient ftp = new FTPClient();
        try {
            ftp.connect("192.168.1.50",21);
            ftp.login(username,password);
            System.out.print(ftp.getReplyString());

            int reply = ftp.getReplyCode();

            if(!FTPReply.isPositiveCompletion(reply)) {
                ftp.disconnect();
                System.err.println("FTP server refused connection.");
                System.exit(1);
            }

            Random rand = new Random();
            byte[] bytes = new byte[1000];
            rand.nextBytes(bytes);

            ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
            ftp.setFileTransferMode(FTPClient.STREAM_TRANSFER_MODE);
            ftp.enterLocalPassiveMode();
            OutputStream out = ftp.storeFileStream("temp");
            long begin = System.nanoTime();
            out.write(bytes);
            long end = System.nanoTime();
            ftp.deleteFile("temp");
            ftp.logout();
            double time = (double)(end - begin) / 1000000000;
            Log.i("RunFTP",String.valueOf(time) + " seconds");

        } catch (IOException | InterruptedException e) {
            e.printStackTrace();
        }
        }
    });

    @Override
    public View onCreateView(LayoutInflater inflater,savedInstanceState);
        mainActivity = getActivity();

        // get user text view of inputted server IP and port
        serverIPView = view.findViewById(R.id.ftpSelectedIP);
        serverPortView = view.findViewById(R.id.ftpSelectedPort);

        // get user text views of inputted server credentials
        serverUsernameView = view.findViewById(R.id.ftpSelectedUsername);
        serverPasswordView = view.findViewById(R.id.ftpSelectedPassword);

        Button runButton = view.findViewById(R.id.ftpRunButton);

        runButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ftpThread.start();
                try {
                    ftpThread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

错误:

W/System.err: java.net.SocketTimeoutException: failed to connect to /192.168.1.50 (port 21) from /100.96.240.94 (port 34106) after 60000ms
W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:191)
        at libcore.io.IoBridge.connect(IoBridge.java:135)
W/System.err:     at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:142)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
W/System.err:     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
        at java.net.Socket.connect(Socket.java:621)
        at com.enterprisedt.util.proxy.PlainSocket.createPlainSocket(PlainSocket.java:131)
        at com.enterprisedt.net.ftp.FTPControlSocket.<init>(FTPControlSocket.java:415)
        at com.enterprisedt.net.ftp.FTPClient.connect(FTPClient.java:1056)
W/System.err:     at com.enterprisedt.net.ftp.FileTransferClient.connect(FileTransferClient.java:424)
        at com.example.networkscanner.SecondFragment$1.run(SecondFragment.java:58)
        at java.lang.Thread.run(Thread.java:919)

我的Windows FTP服务器。一切设置完毕,端口转发设置完毕,尝试将其连接到同一网络并在移动设备上进行。

Server is on correct IP and Port and is running

有什么想法吗?我不确定该怎么办。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...