Hai
Szeretnek egy kis java-s appot integralni egy android projektbe:
http://code.google.com/p/x-pi/Szepen be is huztam ahogy kell, kicsit faragram az XML beolvaso reszen, hogy az assets-bol szedje a xml-t (gyakran valtozhat, kesobb netrol johet).
Itt a
String dataGroupConfigXML
-bol lett egy
InputStream dataGroupConfigXML
(http://code.google.com/p/x-pi/source/browse/src/xplane/XPlaneInterface…)
Igy:
InputStream istr;
istr = getAssets().open("DATAGroupConfig.xml");
Meg is talalta, viszont valamiert az UDP packeteket nem latja, kiirja, hogy "No UDP reception", innen:
http://code.google.com/p/x-pi/source/browse/src/xplane/communication/XP…
Az erdekes az, hogy siman javac-vel leforditva a Test.java problema nelkul olvassa es kiirja a szerverrol jovo adatokat. A telo is latja a szervert, ugyanazon alhalon vannak, wifi-n, ahol a laptop is - amin a Test siman futik.
3 ora guglizas utan feladtam a dolgot, mert nem talaltam semmi ra utalo jelet, hogy barmi rossz lenne. Legtobb helyen a
DatagramSocket
-et emlegetik, de azzal van megoldva a dolog, szoval kifogytam az otletekbol, hogy mi lehet meg itt a rosszasag.
Szoba kerul meg, hogy ha emulatoron nezem, akkor tunnelezni kell, de telon nezem, igy ez sem jatszik. Tuzfal nincs a telora telepitve. Mindenhol csak azt talalom, hogy az UDP az egyik legegyszerubb dolog a vilagon es mennie kell :)
Koszi a segitseget!
- 5109 megtekintés
Hozzászólások
Módosítsd az XPlaneUDPReceiver.java#80-t, hogy loggolja ki magát az exception-t is stacktrace-szel együtt. Abból talán okosabbak leszünk.
Esetleg próbáld meg magasabbra állítani a timeoutot a socket-en 1000 ms-ekről. Lehet az túl rövid a telón. Ha pl.: 0-ra állítod, akkor végtelen ideig fog várni.
- A hozzászóláshoz be kell jelentkezni
Koszi!
A timeout allitasa nem volt sikeres. Felvettem elobb 10mp-re, aztan 0-ra, egyik sem nyert.
Az exception:
05-03 18:40:21.716: I/XPlaneUDPReceiver(5628): No UDP reception - java.net.SocketTimeoutException: Connection timed out
A stacktrace:
05-03 18:40:21.716: I/System.out(5628): dalvik.system.VMStack.getThreadStackTrace(Native Method)
05-03 18:40:21.716: I/System.out(5628): java.lang.Thread.getStackTrace(Thread.java:794)
05-03 18:40:21.716: I/System.out(5628): xplane.communication.XPlaneUDPReceiver.run(XPlaneUDPReceiver.java:82)
Ebbol gondolom nem sokra lehet kovetkeztetni, vagy nem jol irattam ki(?)
for (StackTraceElement st : Thread.currentThread().getStackTrace()) {
System.out.println(st + "\n");
}
- A hozzászóláshoz be kell jelentkezni
Mi történt, amikor 0-t állítottál be (elvileg akkor várnia kellene amíg le nem lövöd)? Meg amikor 10 secet? Várt annyit?
Esetleg próbáld meg kivenni az egész timeout beállítást és kipróbálni úgyis.
Egy exception ki tudja logolni a saját stracktracet: e.printStrackTrace().
- A hozzászóláshoz be kell jelentkezni
Ha 0-ra allitottam, akkor csak vart-vart-vart, de nem tortent semmi.
Amikor 10-re, akkor vart annyit.
Ha kiveszem a timeoutot, akkor is csak figyel, de nem jon adat.
... es sajons az e.printStackTrace() sem mondott sok ujat:
java.net.SocketTimeoutException: Connection timed out
at org.apache.harmony.luni.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:263)
at java.net.DatagramSocket.receive(DatagramSocket.java:414)
at xplane.communication.XPlaneUDPReceiver.receive(XPlaneUDPReceiver.java:59)
at xplane.communication.XPlaneUDPReceiver.run(XPlaneUDPReceiver.java:68)
Lehet az, hogy az androidban mashogy van implementalva a DatagramSocket, es amiatt hasal el valami?
--
x-plane :: hu
- A hozzászóláshoz be kell jelentkezni
Ahogy a stacktraceből látszik az android az Apache Harmony féle datagram implementációt használja.
- A hozzászóláshoz be kell jelentkezni
PEBKAC: az x-plane-ben be kellett allitani, hogy hova kuldje a csomagokat. Meg regebben allitottam be egy masik alkalmazas miatt a gep ip cimet. Bravo Garfield... :)
- A hozzászóláshoz be kell jelentkezni
\o/
- A hozzászóláshoz be kell jelentkezni