2010-10-11 7 views
2

J'ai créé un programme Java qui agit en tant que serveur Web de repos. Il obtient la requête http et envoie une réponse. Je reçois la requête http en tant que flux d'entrée dans mon serveur. Je veux convertir ce flux d'entrée en chaîne, puis vouloir analyser la chaîne en fonction d'un modèle prédéfini. Le problème est que lorsque j'obtiens le flux d'entrée et que je tente de le convertir en chaîne, il ne terminera pas l'opération tant qu'une nouvelle requête ne sera pas arrivée ou que la requête d'origine ne sera pas terminée. Si l'un de ces deux événements se produit seulement alors le flux d'entrée est converti avec succès en chaîne sinon il ne peut y être pendu. Est-ce que je manque quelque chose? Toutes les suggestions seront très utiles.Problème lors de la conversion d'InputStream en chaîne

ServerSocket service = new ServerSocket(Integer.parseInt(argv[0])); 
    Socket connection = service.accept(); 

       InputStream is = connection.getInputStream(); 
       String ss = IOUtils.toString(is); 
       System.out.println("PRINT : "+ss); 

Maintenant, le ss n'est imprimé que lorsque l'ancienne demande est terminée ou que la nouvelle demande est acceptée au niveau du socket. Je veux le convertir en chaîne dans la même demande.

S'il vous plaît me suggérer ce que je fais mal?

Merci, Tara Singh

+0

Quel est le problème avec l'utilisation de 'old.lead()'? –

+1

Comment puis-je l'obtenir en tant que chaîne en utilisant is.read? –

Répondre

1

Vous devriez lire la requête par étapes. Lisez d'abord les en-têtes, ligne pour ligne. Ensuite, s'il s'agit d'une demande POST, il y aura un corps de requête. Si c'est le cas, vous devriez avoir lu un en-tête Content-Length avant, qui indique combien de temps le corps est en octets. Vous devriez lire ce nombre d'octets du flux d'entrée.

La plupart de ces informations sont déjà gérées pour vous si vous créez cette application en tant que servlet ou, si cela n'est pas possible, en utilisant une bibliothèque de serveurs HTTP.

+0

Merci pour votre suggestion, En fait, je l'ai également redessiné de la même manière. –

+0

L'exigence était de concevoir un serveur autonome. Ainsi je le fais moi-même. Merci pour vos suggestions –

0

Ce que vous faites mal est que vous voulez convertir un flux en une chaîne d'une opération qui est seulement possible lorsque le flux est terminé. C'est pourquoi vous obtenez votre chaîne lorsque la connexion est terminée. De quelle autre façon la méthode toString est-elle supposée savoir quand il n'y a plus de données et que la conversion doit commencer? Que se passe-t-il si une chaîne est crachée et qu'entre-temps, plus de données arrivent dans le flux? Je suppose que vous ne serez pas heureux alors aussi :)

En bref: vous devez en quelque sorte savoir quand vous avez fini de recevoir avant de convertir en chaîne. Reconcevoir votre application

+0

Merci pour votre réponse. Je comprends ton point de vue. –

Questions connexes