2013-08-05 4 views
0

Привет, новый в Linux и программировании для Android, моя идея - отправить пакетные данные из Raspberry Pi на Android-телефон через TCP-сокет. . Когда началось соединение, поток данных хорошо, после того, как несколько данных отправили потоковое сообщение, иногда «заклинило».Android Raspberry pi W/System.err (13264): java.net.ConnectException отключено

Мой андроид телефон IP 192.168.43.1 Мой статический IP малина 192.168.43.5

Я пытаюсь изменить номер порта, но соединение все еще застряла, я стараюсь, чтобы уменьшить размер пакета данных, но и до сих пор застряла . Я предполагаю, что брандмауэр малины (если он существует) является проблемой или, может быть, конфигурацией iptables, но как проверить и отключить брандмауэр Raspberry? просто информация, у моей малины не было firestarter. Или как использовать iptables?

Не могли бы вы помочь мне, почему это произошло? Или любая ссылка будет замечательной, спасибо заранее! Вот мой LogCat:

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# 

это малина код Баш для отправки данных

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

Вот моя ява код для потоковой передачи данных:

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; 

    }; 
+0

Кажется, это исключение выбрано в connect(). Вы случайно подключаете новый сокет для каждой передачи? Правильно ли вы закрываете свои подключения? Если вы это сделаете, и все еще есть проблемы, некоторые из вашего кода были бы полезны, чтобы помочь вам найти эту ошибку. – Bex

+0

Я использую код Java выше, чтобы соединить разъем на малине pi .. – user2307181

+0

Да. Также отправьте код андроида для отправки. – Bex

ответ

1

Здесь происходит несколько странных вещей.

Возможно, вы собьете флаг -k на netcat - это означает, что соединение останется.

Ваш awk-скрипт, кажется, гарантирует отправку только последней строки файла. Это намеренно?

Вы делаете довольно жестокое зависание в java-коде - когда вы получили свое сообщение, вы закрываете сокет. Подумайте о том, чтобы прочитать все сообщение, отфильтровать то, что вам нужно, и закрыть сокет в блоке finally в конце. (Всегда полезно закрывать ресурсы в конечном блоке.)

 Смежные вопросы

  • Нет связанных вопросов^_^