Probleme mit Server und Sockets

  • 1 Antworten
  • Letztes Antwortdatum
G

Goldfish

Neues Mitglied
0
Hi, ich bin ziemlich neu bei android und versuche gerade eine Anwendung zu schreiben, die sich mit einem kleinen Java-Server verbindet.
Soweit klappt alles gut, die Verbindung wird hergestellt vom Android Client aus und der Server akzeptiert das ganze und weiß, dass sich da was anmeldet.
Problem jetzt ist, dass wenn ich via ObjectOutputStream ein Objekt an den Server schicke, der Server die Nachricht nicht erhält... der liest einfach nichts ein, als würde der Postbote unterwegs das Paket verlieren und entsprechend gar nicht mehr an der Haustür klingeln... hat jemand ne Ahnung, woran das liegen kann?

Hier kurze entsprechende Codeausschnitte dazu

Code:
// Dieser Code wird ausgeführt und klappt wunderbar soweit

private OnTouchListener getConnectionListener(){
        OnTouchListener clickListener = new OnTouchListener(){
        public boolean onTouch(View arg0, MotionEvent arg1) {
          try {       
            sock = new Socket("10.0.2.2",55555);
            output = new ObjectOutputStream(sock.getOutputStream());
            input = new ObjectInputStream(sock.getInputStream());
            ....
            startServerInputListener();
          } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
          }         
          return false;
        }        
          };
          return clickListener;
      }


   // nach Lognachricht, kommt er hier auch bis zum Warten auf den input
private void startServerInputListener(){            
          new Thread(new Runnable() {
                public void run() {
                    while(true){
                          try {
                              Log.d("MyApp","Vor der Nachricht");
                          Request message = (Request) input.readObject();
                                  Log.d("MyApp","Nach der Nachricht");
                          handleRequest(message);           
                        } catch (ClassNotFoundException e ) {
                          e.printStackTrace();
                        } catch(IOException e){
                          e.printStackTrace();
                        }
                        }
                }
              }).start();        
      }


// hier die letzen beiden kleinen Teile
// der OnClickListener der gleich kommt, wird laut Log immer aufgerufen, wenn ich den entsprechenden Button drücke und entsprechend müsste die Nachricht ja auch versendet werden, da ich hier keine Exception geworfen bekomme.

private void handleRequest(Request r){
        switch(r.type){
          case LOGIN:
              
            String message = (String) r.getObject(RequestKey.LOGIN);
            answer.setText(message);
            break;
        }
      }
      
      private OnTouchListener getSendListener(){
        OnTouchListener clickListener = new OnTouchListener(){
            public boolean onTouch(View v, MotionEvent event) {
                String password = text.getText().toString();  
                Request r = new Request(RequestType.LOGIN);
                r.addObject(RequestKey.LOGIN, password);
                try {
                    Log.d("MyApp","Senden der Request: "+password);
                    output.writeObject(r);
                } catch (IOException e) {
                    Log.d("MyApp","Request nicht gesendet: "+password);
                    e.printStackTrace();
                }
                return false;
            }
      
          };
          return clickListener;
      }


Auf dem Server sieht die Annahme folgendermaßen aus. Und ja die Funktion wird aufgerufen. Meine testausgaben bestätigen definitiv, dass der Thread gestartet wird.


Code:
public void listenForMessage(){
    Thread t = new Thread(){
      @Override
      public void run(){
        while(true){
          Request message;
          Object obj = null;
          try {
            obj = input.readObject(); 
            message = (Request) obj;
          } catch (ClassNotFoundException | IOException e) {
            JOptionPane.showMessageDialog(ServerExample.f, "Request Cast Fehler: "+obj.getClass());
            e.printStackTrace();
            return;
          }
          JOptionPane.showMessageDialog(ServerExample.f, "klappt doch");
          handleMessage(message);
        }
      }
    };
    t.start();
  }

Wäre super, wenn jemand weiß, wieso ich dieses Problem habe. Wenn ichs über einen herkömmlichen Java-Client mache, der nicht auf einem Androidsystem basiert funktioniert alles wunderbar.

Danke für jede Hilfe.
 
Hallo, da es sich hier nicht um ein App spezifisches Thema handelt, hab ich es in das richtige Forum verschoben. Gruss Ladylike

Gesendet aus den Tiefen meines Unterbewusstseins - mit Tapatalk
 

Ähnliche Themen

tarek857
Antworten
4
Aufrufe
467
tarek857
tarek857
Zurück
Oben Unten