Je veux écrire un proxy web simple, pour l'exercice. Voici le code que j'ai jusqu'à présent:Socket client lu "se fige"
def g = new Proxy()
g.serverPort = 9000
println "starting"
g.eachClient { Socket client ->
println "got a client"
try {
client.withStreams { input,output ->
String text = input.text
println "received $text from client"
client.close()
}
} catch(IOException io) {
println "IO error. Probably client disconnected"
//io.printStackTrace()
}
}
la chose est, la ligne:
String text = input.text
consume toutes les données disponibles dans InputStream du Socket. Si le client ne ferme pas la connexion, cette méthode attendra jusqu'à ce qu'il puisse lire un caractère de fin de fichier (si je me souviens bien). Que dois-je faire pour éviter que cela se produise et que la chaîne du client soit disponible dès que possible?
Cela a fonctionné! Merci! Une autre question s'il vous plaît, comment Java sait combien d'octets sont disponibles? – Geo
Il s'agit plus d'une question de la bibliothèque de socket du système d'exploitation sous-jacent, que Java résume pour vous. Vous pouvez voir un exemple de la façon de faire cela en utilisant C dans un système d'exploitation * nix ici: http://www.dholm.com/2008/05/13/available-socket-bytes/ –