android里面通过scp上传文件

(1)添加库
打开网址:https://www.ganymed.ethz.ch/ssh2/
下载:ganymed-ssh2-build210.jar
用我的mqtt的方法,加入库。

(2)把自己写好的文件,拷贝到工程里面。

(3)解决问题

问题一:

使用的时候,我发现总是连不上,我查看了一下日志,发现这个错误:2022-03-23 15:27:08.583 8013-8013/? W/System.err: Caused by: java.net.SocketException: socket failed: EACCES (Permission denied)

我网上搜了一下,网友说这样解决:

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

    添加这一行
    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        //...
    </application>
</manifest>
果然,不会出现上面的错了。

问题二:

上面的问题解决后,运行一下,程序崩溃,出现下面的错误:

2022-03-23 16:56:03.380 14260-14260/com.tradingstrategy D/AndroidRuntime: Shutting down VM
2022-03-23 16:56:03.381 14260-14260/com.tradingstrategy E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tradingstrategy, PID: 14260
    android.os.NetworkOnMainThreadException
        at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:355)
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:357)
        at java.net.Socket.connect(Socket.java:616)
        at ch.ethz.ssh2.transport.TransportManager.establishConnection(TransportManager.java:340)
        at ch.ethz.ssh2.transport.TransportManager.initialize(TransportManager.java:448)
        at ch.ethz.ssh2.Connection.connect(Connection.java:643)
        at ch.ethz.ssh2.Connection.connect(Connection.java:490)
        at com.tradingstrategy.ui.utils.UtilsScp.connect(MyScp.java:49)
        at com.tradingstrategy.ui.update.UpdateFragment.onClick(MyFragment.java:71)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24770)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6494)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
以前出现这些错误,都是一直点,直接跳到崩溃的地方,然后修改一下代码就可以了。现在点到最后也就是文件StrictMode.java的builder.penaltyLog();怎么办呢?我还找一下其他错误的地方,然后在百度里面搜索。最后也没搜到有用的信息。搞了一个小时左右,我突然灵光一现,根据我之前的经验,最后一行就是最后错误所在的地方,我拷贝at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1450)这行,到百度里面搜一下,结果有答案了。网上这样说:

android.os.NetworkOnMainThreadException是说不要在主线程中访问网络,这个应该是android4.0版本开始就强制不能在主线程中访问网络,要把访问网络放在
独立的线程中。如果一定要忽略这些强制策略问题的话,可以在onCreate()方法里面加上
StrictMode.ThreadPolicy policy=new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

我在我顶层Activity的onCreate()方法里面加上上面的代码。果然,不会崩溃了。

这样的坑都有啊,哎。还好,我这个多绝招的人还能勉强应付。

问题三:

前几天,我换了服务器,发现我的APP没法连上。我用电脑,可以连上,这说明跟服务器没有关系。我用手机的termux,也能连上,跟手机网络也没有关系。我用旧的版本,只改IP,什么也不改,结果也连不上。说明跟代码也没有关系。

我一开始想,是不是配置问题。原来的服务器的默认配置可以连接上,新服务器的默认配置连接不上。但是我搜了一下配置的问题,没法先什么。原来的服务器打不开了。

后面我想到是不是版本的问题。我沿着这个方法查找问题。

我打开我的代码,看到:ganymed-ssh2-build210.jar

在服务器上面,执行ssh -V,看到:OpenSSH_8.2p1 Ubuntu-4ubuntu0.11, OpenSSL 1.1.1f  31 Mar 2020

找到这个网页:【Java】Ganymed-ssh2.jar包连接服务器报错(OpenSSH高版本)_ganymed-ssh2问题-CSDN博客

[1]登录到服务器

[2]sudo vim /etc/ssh/sshd_config

[3]文件最下面添加:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com

#MACs hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha1,hmac-sha1-etm@openssh.com

MACs hmac-sha1-96,hmac-sha1,hmac-md5-96,hmac-md5,hmac-sha2-512,hmac-sha2-512-etm@openssh.com,hmac-sha2-256,hmac-sha2-256-etm@openssh.com,hmac-sha1,hmac-sha1-etm@openssh.com

KexAlgorithms curve25519-sha256,curve25519-sha256@libssh.org,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256

非常感谢这个作者,否则没办法搞定。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值