【问题标题】:FTP which IP to use?FTP使用哪个IP?
【发布时间】:2016-01-26 20:12:38
【问题描述】:

我正在使用此代码:

    ftpClient.connect(InetAddress.getByName(10.0.0.100));
ftpClient.login(user, password);
ftpClient.changeWorkingDirectory(serverRoad);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
BufferedInputStream buffIn=null;
buffIn=new BufferedInputStream(new FileInputStream(file));
ftpClient.enterLocalPassiveMode();
ftpClient.storeFile("test.txt", buffIn);
buffIn.close();
ftpClient.logout();
ftpClient.disconnect();

我的项目在这一行崩溃了

ftpClient.connect(InetAddress.getByName(server));

所以服务器 ip 必须是假的,我使用了运行服务器的 pc 的 ip。 IP:10.0.0.100 这个ip有什么问题?

顺便说一句,我正在使用 apache commons

然后它向我抛出了这个:

      D: [NET] android_getaddrinfofornet+,hn 16(0x6674703a2f2f31),sn(),hints(known),family 0,flags 4
D: [NET] android_getaddrinfofornet-, err=8
W: android.os.NetworkOnMainThreadException
W:     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1155)
W:     at java.net.InetAddress.lookupHostByName(InetAddress.java:418)
W:     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
W:     at java.net.InetAddress.getByName(InetAddress.java:305)
W:     at com.example.mathias.newproject.MainActivity.connnectingwithFTP(MainActivity.java:89)
W:     at com.example.mathias.newproject.MainActivity$2.onClick(MainActivity.java:52)
W:     at android.view.View.performClick(View.java:4785)
W:     at android.view.View$PerformClick.run(View.java:19858)
W:     at android.os.Handler.handleCallback(Handler.java:739)
W:     at android.os.Handler.dispatchMessage(Handler.java:95)
W:     at android.os.Looper.loop(Looper.java:155)
W:     at android.app.ActivityThread.main(ActivityThread.java:5696)
W:     at java.lang.reflect.Method.invoke(Native Method)
W:     at java.lang.reflect.Method.invoke(Method.java:372)
W:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
W:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)

清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.mathias.newproject" >

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme" >


        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar" >


            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

【问题讨论】:

  • 您的清单中有 Internet 权限吗?请分享 logcat
  • 共享日志以及声明变量“server”的 sn-p
  • 添加了 logcat 和 manifest @Santiago
  • @darthvading 变量“服务器”在“10.0.0.100”中声明为字符串
  • @Ribisl EACCES 表示这很可能是内部错误,您甚至没有尝试检查给定的 IP。检查答案以获取可能需要的其他权限。

标签: android ftp-client ipv4


【解决方案1】:

从应用程序中删除uses-permission标签并将它们移动到manifest

check here how a manifest must be written:

<manifest>

    <uses-permission />
    <permission />
    <permission-tree />
    <permission-group />
    <instrumentation />
    <uses-sdk />
    <uses-configuration />  
    <uses-feature />  
    <supports-screens />  
    <compatible-screens />  
    <supports-gl-texture />  

    <application>

            <activity>
            <intent-filter>
                <action />
                <category />
                <data />
            </intent-filter>
            <meta-data />
        </activity>

        <activity-alias>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </activity-alias>

        <service>
            <intent-filter> . . . </intent-filter>
            <meta-data/>
        </service>

        <receiver>
            <intent-filter> . . . </intent-filter>
            <meta-data />
        </receiver>

        <provider>
            <grant-uri-permission />
            <meta-data />
            <path-permission />
        </provider>

        <uses-library />

    </application>

</manifest>

【讨论】:

  • 工作但不完全,我有新的 logcat 失败
  • 你的代码中有几个“错误”的东西,现在,新的错误是:NetworkOnMainThreadException,因为你做了Network相关操作OnMainThread,因此抛出了Exception...如果你用谷歌搜索这些术语,你会找到AsyncTask,然后继续下一个问题。但是先用谷歌搜索它们,或者甚至使用 Stack Overflow 搜索......最后,如果答案帮助您解决了问题,请单击左侧箭头附近的 v 符号,以帮助其他人找到解决问题的方法
【解决方案2】:

您可能在AndroidManifest.xml 中错过了此权限。

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

【讨论】:

  • 也使用:&lt;uses-permission android:name="android.permission.INTERNET" /&gt; .......... &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt; ......... &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt;
猜你喜欢
  • 1970-01-01
  • 2014-08-14
  • 1970-01-01
  • 2014-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-28
  • 2022-12-07
相关资源
最近更新 更多