IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Android Discussion :

Android et les Sockets


Sujet :

API standards et tierces Android

  1. #1
    Membre actif
    Homme Profil pro
    Analyse système
    Inscrit en
    Février 2012
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Février 2012
    Messages : 30
    Par défaut Android et les Sockets
    Bonjour ! Aujourd'hui je viens de vous demander un peu d'aide... j'ai un soucis au niveau des sockets: j'ai un serveur C# et j'ai un AsyncTask sur Android pour tout récupérer.

    Donc il s'agit d'un jeu et d'un dialogue constant entre les deux parties mais le problèmes, c'est lorsque j'envoie trop de données d'un coup, il y a comme une erreur de... "bourrage papier" !

    En gros, dans mon serveur, à un moment j'envoie plusieurs données de manière asynchrone et l'application reçoit, mais sauf qu'il s'agit de plusieurs message considéré dans le même... En gros, j'envoie "BONJOUR", "BONJOUR", "BONJOUR",...
    Et lui il reçoit ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    01-09 16:25:13.742 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.752 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOURBONJOURBONJOURBONJOURBONJOUR
    01-09 16:25:13.762 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.772 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.782 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.792 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.802 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.832 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.852 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOURBONJOUR
    01-09 16:25:13.862 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.862 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.892 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.912 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.912 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.932 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.942 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOURBONJOUR
    01-09 16:25:13.942 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.952 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.962 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.972 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.982 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:13.992 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.012 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.022 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.032 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.042 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.052 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.062 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.102 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.112 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOURBONJOURBONJOUR
    01-09 16:25:14.122 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.132 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.142 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.152 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.162 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.172 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.182 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.192 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.212 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.222 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.232 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOUR
    01-09 16:25:14.342 6122-6122/com.example.masterb.silversword E/PAQUET: BONJOURBONJOURBONJOURBONJOUR
    Même quand j'en envoie, que je fais le Write et le Flush, le serveur reçoit idem, un gros bourrage papier !
    Quelqu'un a une belle idée à me proposer ??
    Voici le code des sockets:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    Socket socket = new Socket(Settings.socketIP, Settings.socketPort);
     
                        Settings.outSocket = new DataOutputStream(socket.getOutputStream());
                        Settings.inSocket = new DataInputStream(socket.getInputStream());
     
     
                        int bytesRead;
                        String dataReceived = "";
                        byte[] buffer = new byte[1024];
     
                        while ((bytesRead = Settings.inSocket.read(buffer)) != -1) {
                            dataReceived += new String(buffer).substring(0, bytesRead);
                            dataReceived = "";
                        }
    Merci de votre aide les gars !

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Billets dans le blog
    3
    Par défaut
    C'est tout le principe de TCP....

    La logique d'envoi (grosso modo, à quelques subtilités d'optimisation prêt) pour la pile TCP est:

    PILE:
    a) Si j'ai pas de données dans mon buffer, j'attends d'en avoir "assez" (au moins de quoi remplir un paquet).
    b) J'envoi un paquet avec les données que j'ai (et je libère le buffer et donc les clients en attente)
    c) J'attends la réponse d'acknowledgement de la destination => pas reçue renvoi du paquet
    d) goto (a)

    CLIENT-write:
    a) J'attends d'avoir assez de place dans le buffer pour écrire les données.
    b) J'écris les données. Si le buffer dépasse la taille d'un paquet, je le signale à la pile TCP (débloquage de la pile en a)
    c) goto (a)

    CLIENT-flush:
    a) Juste signaler à la pile d'envoyer ce qu'il y a dans le buffer.

    Donc imaginons, que la pile soit en (c)
    On a beau faire 459 flush, tous les write effectués seront séquentiels dans le buffer et se rajoutent, sans que les fonctions ne bloquent tant que le buffer a suffisemment de place.
    Du coup on peut très bien se retrouver avec plusieurs write reçus en une seule fois, même si on fait flush après chaque write (ce qui est fortement contre productif).

    Il vaut mieux écrire une marque de fin de message pour pouvoir séparer les messages.

    Ou encore, utiliser UDP pour envoyer de petits messages.

Discussions similaires

  1. [CF][PPC/VB.NET] Comment utiliser les Socket avec Pocket PC ?
    Par joefou dans le forum Windows Mobile
    Réponses: 5
    Dernier message: 17/05/2005, 14h24
  2. [Kylix] Aide por les sockets
    Par nabs dans le forum EDI
    Réponses: 1
    Dernier message: 03/04/2004, 12h35
  3. les sockets sur != réseaux
    Par Hypnos dans le forum Développement
    Réponses: 2
    Dernier message: 02/03/2004, 09h45
  4. [Kylix] cherche composants pour les sockets
    Par coriolis dans le forum EDI
    Réponses: 1
    Dernier message: 09/04/2003, 10h18
  5. Questionsssss sur les sockets?
    Par Nino dans le forum Développement
    Réponses: 5
    Dernier message: 01/04/2003, 21h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo