• Hallo,
    ich versuche schon seit langer Zeit einen einfachen TCP Client in meine App einzubauen. Jedoch scheitere ich schon beim Starten des Sockets.


    Code
    InetAddress ia;
    ia = java.net.InetAddress.getByName(TbIp.getText().toString());
    Socket s = new Socket(ia, 8000);


    Logcat sagt:


    10-02 23:24:05.628: E/AndroidRuntime(15687): FATAL EXCEPTION: main
    10-02 23:24:05.628: E/AndroidRuntime(15687): android.os.NetworkOnMainThreadException
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:84)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at libcore.io.IoBridge.connectErrno(IoBridge.java:127)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at libcore.io.IoBridge.connect(IoBridge.java:112)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at java.net.Socket.startupSocket(Socket.java:566)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at java.net.Socket.<init>(Socket.java:225)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at com.example.tcptest.MainActivity$1.onClick(MainActivity.java:42)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.view.View.performClick(View.java:3591)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.view.View$PerformClick.run(View.java:14263)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.os.Handler.handleCallback(Handler.java:605)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.os.Handler.dispatchMessage(Handler.java:92)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.os.Looper.loop(Looper.java:137)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at android.app.ActivityThread.main(ActivityThread.java:4507)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at java.lang.reflect.Method.invokeNative(Native Method)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at java.lang.reflect.Method.invoke(Method.java:511)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
    10-02 23:24:05.628: E/AndroidRuntime(15687): at dalvik.system.NativeStart.main(Native Method)
    10-02 23:24:56.788: I/Process(15687): Sending signal. PID: 15687 SIG: 9


    Vielen Dank für eure Hilfe!

  • Hi XshapeX,


    Netzwerkzugriffe müssen ab Android 4.0 innerhalb eines seperaten Thread ausgeführt werden.
    Da du dies nicht machst bekommst du eine "android.os.NetworkOnMainThreadException" Exception.


    Achso das hier:

    Java
    EditText TbIp = (EditText) findViewById(R.id.TbIp);
    EditText TbPort = (EditText) findViewById(R.id.TbPort);


    solltest du in die Oncreate schreiben, weil wenn nicht wird jedesmal wenn du den Button drückst die XML nach diesen Views durchsucht werden. Das wird jetzt bei deinen Layout nicht so das Problem sein, solltest du aber mal ein großes Layout erstell könnte es aber zu Performance Problem kommen.


    mfg Titus

    Einmal editiert, zuletzt von titus () aus folgendem Grund: Ich solltest den Post vor dem abschicken nochmal einmal durchlesen :D

  • Vielen Dank für deine Antwort! Ich werde das gleich mal ausprobieren und bescheid sagen wenn es läuft.


    //Edit1
    [Blockierte Grafik: https://photos-2.dropbox.com/t/0/AAAzIHYuIwLyai1m-GBsPWZj_p0m_q52disue7FigpWUQg/10/78665980/png/1024x768/2/1349445600/0/2/tcpThread.PNG/vxhfsBiiPi6W-Ts_c2mQUPEZ8217siTcfPsDLv7WHSU
    Also, das ist der Thread den ich gerade geschrieben habe. Die App stürtzt nicht ab, deswegen denke ich das es Funktionert. Aber wie kann ich jetzt Toasts öffnen um z.B. die Exceptions auszugeben? Normalerweise mach ich das ja so:

    Code
    Toast.makeText(getApplicationContext(),...).show();


    Aber in mein Thread ist ja keine ActivityKlasse wie komm ich dann an den AppContext?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!