【问题标题】:Android Raspberry pi W/System.err(13264): java.net.ConnectException connection refusedAndroid Raspberry pi W/System.err(13264):java.net.ConnectException 连接被拒绝
【发布时间】:2013-09-10 17:58:02
【问题描述】:

你好,我是 linux 和 android 编程的新手,我的想法是通过 TCP 套接字将数据包数据从 Raspberry Pi 发送到 Android 手机。 .当连接开始时,数据流很好,在发送少量数据后,流有时会“卡住”。

我的安卓手机IP 192.168.43.1 我的静态树莓IP 192.168.43.5

我尝试更改端口号但连接仍然卡住,我尝试减小数据包数据的大小但仍然卡住。我假设树莓防火墙(如果存在)是问题或者可能是 iptables 配置,但是如何检查和禁用树莓防火墙呢?只是信息,在我的覆盆子中没有引火器。或者如何使用 iptables ?

你能帮我解释为什么会这样吗?或者任何参考都会很棒,在此先感谢!这是我的日志:

07-30 13:11:20.731: W/System.err(13264): java.net.ConnectException: failed to connect to /192.168.43.20 (port 12345): connect failed: ECONNREFUSED (Connection refused)
07-30 13:11:20.731: W/System.err(13264):   at libcore.io.IoBridge.connect(IoBridge.java:118)
07-30 13:11:20.731: W/System.err(13264):   at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
07-30 13:11:20.731: W/System.err(13264):   at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
07-30 13:11:20.731: W/System.err(13264):   at java.net.Socket.startupSocket(Socket.java:571)
07-30 13:11:20.731: W/System.err(13264):   at java.net.Socket.tryAllAddresses(Socket.java:132)
07-30 13:11:20.731: W/System.err(13264):   at java.net.Socket.<init>(Socket.java:182)
07-30 13:11:20.731: W/System.err(13264):   at java.net.Socket.<init>(Socket.java:154)
07-30 13:11:20.731: W/System.err(13264):   at com.uavgama.Streamingdata.Masukan(Streamingdata.java:19)
07-30 13:11:20.731: W/System.err(13264):   at com.uavgama.Adhrsparse.Keluar(Adhrsparse.java:71)
07-30 13:11:20.731: W/System.err(13264):   at com.uavgama.Adhrsparse$1.run(Adhrsparse.java:26)
07-30 13:11:20.731: W/System.err(13264):   at android.os.Handler.handleCallback(Handler.java:615)
07-30 13:11:20.731: W/System.err(13264):   at android.os.Handler.dispatchMessage(Handler.java:92)
07-30 13:11:20.731: W/System.err(13264):   at android.os.Looper.loop(Looper.java:137)
07-30 13:11:20.731: W/System.err(13264):   at android.app.ActivityThread.main(ActivityThread.java:4744)
07-30 13:11:20.731: W/System.err(13264):   at java.lang.reflect.Method.invokeNative(Native Method)
07-30 13:11:20.741: W/System.err(13264):   at java.lang.reflect.Method.invoke(Method.java:511)
07-30 13:11:20.741: W/System.err(13264):   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
07-30 13:11:20.741: W/System.err(13264):   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
07-30 13:11:20.741: W/System.err(13264):   at dalvik.system.NativeStart.main(Native Method)
07-30 13:11:20.741: W/System.err(13264): Caused by: libcore.io.ErrnoException: connect failed: ECONNREFUSED (Connection refused)
07-30 13:11:20.741: W/System.err(13264):   at libcore.io.Posix.connect(Native Method)
07-30 13:11:20.741: W/System.err(13264):   at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85)
07-30 13:11:20.741: W/System.err(13264):   at libcore.io.IoBridge.connectErrno(IoBridge.java:131)
07-30 13:11:20.741: W/System.err(13264):   at libcore.io.IoBridge.connect(IoBridge.java:116)
07-30 13:11:20.741: W/System.err(13264):   ... 18 more

这是我用来发送的打包数据:

$909.29|34.16|160.39907|123.51508|189.56|40.42|339.78#
$62.88|52.38|32.62654|170.11087|19.19|99.57|127.72#
$847.45|65.29|128.59294|114.23773|161.92|268.55|28.90#
$957.35|48.49|142.63874|9.20948|161.73|297.63|348.33#
$634.97|25.16|105.1316|23.51827|185.56|195.88|189.1#
format :
$altitude|airspeed|lat|lon|pitch|roll|yaw#

这是用于发送数据的 raspberry bash 代码

cat /home/pi/file | awk -F'\t' 'END{print}' | nc -l 12345

这是我用于数据流的 java 代码:

 public static String Masukan() {
try {
    Socket s;
    s = new Socket("192.168.43.20", 12345);
    s.getReuseAddress();
    s.getTcpNoDelay();
    BufferedReader inp = null;
    inp = new BufferedReader(new InputStreamReader(s.getInputStream()));
    String serverMsg = null;
    serverMsg = inp.readLine();
        if ( serverMsg.endsWith("#")) {
                filter = serverMsg; 
                s.close();
            }

} catch (IOException e) {
            e.printStackTrace();
            }
return filter; 

    };

【问题讨论】:

  • 看来这个异常是在connect()中抛出的。您是否有机会为每次传输连接一个新套接字?您是否正确关闭了连接?如果你这样做了,但仍然存在问题,你的一些代码将有助于你找到这个错误。
  • 我使用上面的java代码连接树莓派上的socket..
  • 是的。也请分享发送的android代码。
  • 我的安卓手机刚刚接收到来自树莓12345端口的数据包..我的代码对吗?
  • 让我直截了当地说:您从手机发送数据,对吧?您在 pi 上接收数据,对吗?你在手机上收到错误,对吧?如果没问题,我们需要查看您手机上的代码来帮助您。

标签: android tcp raspberry-pi iptables netcat


【解决方案1】:

这里发生了许多奇怪的事情。

您可能想在 netcat 上尝试-k 标志 - 这意味着连接将保持不变。

您的 awk 脚本似乎确保只发送文件的最后一行。这是故意的吗?

你在 java 代码中做了一个相当暴力的挂断 - 当你收到你的消息时,你关闭了套接字。考虑阅读所有消息,过滤掉您需要的内容,并在最后关闭finally 块中的套接字。 (在 finally 块中关闭资源总是一个好主意。)

【讨论】:

    猜你喜欢
    • 2018-03-02
    • 2015-05-18
    • 2018-06-10
    • 2023-03-21
    • 2017-08-10
    • 1970-01-01
    • 2014-11-01
    • 2011-05-12
    相关资源
    最近更新 更多