2010-01-10 7 views
0

J'ai deux téléphones connectés à un point d'accès Wifi, les deux ont ip dans la gamme privée. L'un des téléphones est équipé d'un serveur HTTP et l'autre téléphone fonctionne comme un client. Le client envoie des données de requêtes GET au serveur en tant que paires de valeurs name/ dans la chaîne de requête d'URL. Au moment où le serveur envoie seulement HTTP.OK à la réception de la chaîne de requête. Ce qui se passe, c'est que le client ne peut pas être stationnaire et peut-être se déplacer, donc il peut ne pas être possible qu'il soit à portée du point d'accès Wifi parce que je ne reçois pas toutes les données envoyées par le client à la fin du serveur. Je veux m'assurer que toutes les données envoyées sont effectivement reçues par le serveur.Http demande réponse débogage

Quel type de correction d'erreur dois-je implémenter? Puis-je vérifier certains codes d'erreur HTTP pertinents ou similaires?

Répondre

1

Si le serveur HTTP ne reçoit pas la totalité de la chaîne de requête dans une requête GET, la requête HTTP ne peut pas être valide car ces paramètres se trouvent sur la première ligne de la requête.

Le serveur ne pourra pas traiter la demande et, dans ce cas, retournera probablement le code d'état 400 (demande incorrecte).

Si votre client reçoit ceci (ce qui semble improbable qu'il échouerait à transmettre la demande, tout en recevant la réponse), alors vous saurez retransmettre. En général, les propriétés des connexions TCP telles que les retransmissions automatiques, les sommes de contrôle et les délais d'expiration doivent être tout ce dont vous avez besoin pour une livraison réussie ou pour déterminer l'échec.

+0

Il est hautement improbable qu'un serveur réponde à une requête excluant les en-têtes de fin (2 CRLF). Votre seule réponse ne sera pas une réponse (c'est-à-dire un délai d'expiration). – SpliFF

+0

Hmm. 'echo" GET/HTTP/1.0 "| nc httpd.apache.org 80' (ou microsoft.com) me donne une erreur 400 tout de suite. –

+0

@ Christopher: Cela signifie que si je reçois un 400 code de retour qui serait considéré comme le serveur a une chaîne de requête défectueux ou mal formé droit? Que se passe-t-il si le serveur est en panne, je vais encore obtenir un 400. –

1

Vous devez vérifier les délais d'attente sur le client. Cela dépend du processus/de la langue utilisée.

EDIT: http://wiki.forum.nokia.com/index.php/Using_Http_and_Https_in_Java_ME

On dirait que vous suffit de définir un délai d'attente et détecter les erreurs IO.

+0

Et comment faire? J'ai écrit l'application dans JavaME –

+0

Je ne fais pas Java, vous devrez vérifier la documentation de votre objet de requête HTTP. Vraisemblablement, une erreur sera lancée et vous devrez l'attraper sinon un type de code d'état sera renvoyé. – SpliFF

1

Optimisation prématurée.

L'intégrité de la connexion est déjà traitée dans les parties inférieures de la pile réseau. Ainsi, s'il y avait des pertes au milieu de la requête (en supposant que cela se produisait sur plus d'un paquet), la pile TCP tenterait de les récupérer avant de transmettre les données au serveur.

Si vous avez besoin de vous le prouver, ajoutez simplement une somme de contrôle comme dernière partie de la requête.

C.

+0

en utilisant un short keep alive et timeout sur le socket client serait cependant une bonne idée. – symcbean