2010-03-03 3 views
2

J'ai une application client-serveur simple sur android. le service android communique avec le serveur via les sockets TCP. le service envoie une chaîne simple au serveur qui fonctionne. le serveur traite la chaîne et renvoie un objet au service android. l'objet implémente l'interface sérialisable. l'objet "quitte" le serveur, mais avec succès au point où le service Android reçoit l'objet (socket.readObject()) J'arrive à une exception près:Android, application client-serveur, Bad Socket Exception

java.net.SocketException: prise Bad

Je Je n'ai jamais vu ça. Qu'est-ce que ça veut dire?

Edit:

Méthode où exception est jeté:

private static void startContextListener(){ 
new Thread(){ 
    public void run(){ 
    try{ 
    while(contextsocket != null && !contextsocket.isClosed() && inContext.readObject() != null){ 
    kontext = (Kontext) inContext.readObject(); 
    } 
    } 
    catch(Exception e){ 
    Log.e(TAG, "startContextListener(): " + e.toString()); 
    } 
    } 
}.start(); 
} 

Répondre

2

Ceci est généralement le résultat d'read(2) sur descripteur de socket invalide ([EBADF] fildes is not a valid file or socket descriptor open for reading) donc il semble qu'une certaine couche de l'application ferme la prise . Pouvez-vous poster plus de code pour montrer comment vous travaillez avec le socket?

+0

private static void startContextListener() { \t \t new Thread() { \t \t \t public void run() { \t \t \t \t try { \t \t \t \t \t while (contextsocket! = Null &&! Contextsocket .isClosed() && inContext.readObject()! = null) { \t \t \t \t kontext = (K ontext) inContext.readObject(); Catch (exception) { Log.e (TAG, "startContextListener():" + e.toString()); } } } .start(); } C'est la méthode qui déclenche l'exception J'ai implémenté cette application et l'application serveur dans deux packages Eclipse différents. Les classes sérialisables sont le même code java écrit mais ce sont deux fichiers différents, un fichier dans chaque projet chacun. Est-ce le problème? – user283494

+0

@moppel: vous feriez mieux d'éditer la question pour ajouter le code. Maintenant pour le code - je ne vois pas de manipulation explicite de socket dans l'extrait que vous avez posté, MAIS il semble que vous essayez de lire votre objet TWICE dans chaque itération de boucle - une fois dans le conditionnel (et le perdre), et une seconde fois le corps de la boucle. Cela pourrait être un problème. –