2017-01-02 1 views
0

Ich habe eine Client-Klasse, den Thread erweitert Socket-Programmierung
meinen Klassencode
android.os.NetworkOnMainThreadException aber meine Klasse erweitert Thema

class MyClientMessages extends Thread { 
     Socket socket; 
     int PORT = 5002; 
     DataInputStream din; 
     DataOutputStream dout; 
     public MyClientMessages(String IP) { 
      try { 
       System.out.println("IP = ======= " + IP + " TYPE = " + TYPE); 
       //*********** crash here *************** 
       socket = new Socket(IP,PORT); // *********** it crash here ************* 
       din = new DataInputStream(socket.getInputStream()); 
       dout = new DataOutputStream(socket.getOutputStream()); 
       this.start(); 
      }catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
     @Override 
     public void run() { 
      while (true) { 
       byte[] data = new byte[1024]; 
       int size = 0; 
       try { 
        while ((size = din.read(data)) > 0) { 
         final String str = new String(data,"UTF8"); 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           TextView textView = new TextView(ServerChat.this); 
           textView.setTextSize(15); 
           textView.setText(str); 
           linearLayout.addView(textView); 
          } 
         }); 
        } 
       }catch (IOException e) { 
        e.printStackTrace(); 
        try { 
         dout.close(); 
         din.close(); 
         socket.close(); 
        } catch (IOException e1) { 
         e1.printStackTrace(); 
        } 
       } 
      } 
     } 

     public void WriteToSocket(byte[] arr,int size) { 
      try { 
       dout.write(arr,0,size); 
       dout.flush(); 
      }catch (IOException e) { 
       e.printStackTrace(); 
       try { 
        dout.close(); 
        din.close(); 
        socket.close(); 
       } catch (IOException e1) { 
        e1.printStackTrace(); 
       } 
      } 
     } 
    } 

Ich mache diese Klasse in meiner Aktivitätsklasse zu starten. Ich habe eine andere Klasse in meiner Aktivitätsklasse für Server, die Thread erweitert und es funktioniert gut. Warum stürzt diese Clientklasse ab und gibt mir diesen Fehler?
dies, wie ich es auf meinem onCreate() Funktion:

if (TYPE == 1) { 
    serverMessages = new MyServerMessages(5002); 
    Toast.makeText(this,"Room Started Wait clients To Join",Toast.LENGTH_LONG).show(); 
} 
else { 
    clientMessages = new MyClientMessages(deConvert(mycode)); // crash here 
    Toast.makeText(this,"Connect To Room",Toast.LENGTH_LONG).show(); 
} 

Antwort

2

warum diese Client-Klasse Absturz und geben Sie mir diesen Fehler?

Weil Sie eine Socket erstellen und im Konstruktor öffnen. Verschieben Sie diese Logik in run().

+0

Danke funktioniert Toll: D –

Verwandte Themen