HTTP server - PrintWriter BufferedReader - Java - Programmation
Marsh Posté le 01-04-2005 à 11:44:50
Bin les Writers et les Readers, c'est fait pour lire des char, pas des bytes. Donc si t'essaies de passer des données de type binaire via ce genre de tuyau, y a des chances pour qu'il y ait des casts à la con dans un coin qui foutent la grouille
Marsh Posté le 01-04-2005 à 12:07:37
Taiche a écrit : Bin les Writers et les Readers, c'est fait pour lire des char, pas des bytes. Donc si t'essaies de passer des données de type binaire via ce genre de tuyau, y a des chances pour qu'il y ait des casts à la con dans un coin qui foutent la grouille |
encodages/decodages
Marsh Posté le 01-04-2005 à 12:12:52
the real moins moins a écrit : encodages/decodages |
Bin j'pensais surtout au passage byte -> char qui est pas forcément recommandé dans le cadre des images et autres fichiers binaires. Maintenant, je sais pas trop comment fonctionnent les Writers/Readers, donc je m'avance pas trop dans l'hypothèse
Marsh Posté le 01-04-2005 à 12:22:07
ben ils font plus que du cast de byte en char quoi
Marsh Posté le 01-04-2005 à 12:24:13
Oui non mais d'accord, mais y a pas de méthode de PrintWriter qui prenne de byte en entrée, non ? Bon bin dans ce cas, comment tu passes une image dans ton PrintWriter ?
Marsh Posté le 01-04-2005 à 12:32:58
ce que je comprends pas, ca devrait recuperer le tag <img ...> non ? pas le binaire ...
Marsh Posté le 01-04-2005 à 12:34:41
Bin en tombant sur un tag <img> le browser client va faire la requête sur l'image et le serveur HTTP devra lui renvoyer. Je pense que c'est à ce moment que ça chie, pas pour la récup du code HTML.
Marsh Posté le 01-04-2005 à 20:34:40
Merci pour toutes vos réponses!
J'imaginais bien que l'erreur devait venir d'un cast foireux quelque part...
Et quel serait le type de données le plus intéressant à utiliser à la place des Reader et des writers alors? Un type qui fonctionne avec les bytes...
Marsh Posté le 01-04-2005 à 22:52:41
Taiche a écrit : Bin DataOutputStream, par exemple |
outputstream tout court pour du binaire
Marsh Posté le 02-04-2005 à 16:49:59
Ho mais ouip! Mais ca marche!
Il suffit de remplacer par des DataInputStream et des DataOutpuStream...on change readLine en readByte et c'est nickel!
Merci beaucoup à tous pour votre aide!
Clabecq
Marsh Posté le 01-04-2005 à 10:10:21
Salut tout le monde!
J'écris un petit serveur http qui prend les requêtes à partir du browser et qui les transmet sur internet. Ensuite, le serveur prend la réponse d'internet et la transfère au browser. (Le but du programme est de modifier le code html reçu avant de le donner au browser mais ce n'est pas encore développé....)
En gros, le serveur fonctionne... Mais j'ai des problèmes avec les images: elles sont toutes formées de gros carrés quand elles veulent bien apparaitre. Si vous essayez le code, vous vous en rendrez compte tout de suite. Vous devez juste modifier les parametres de connexion d'internet explorer: proxy server 127.0.0.1 et port 12345 et bien sûr lancer le code java...
En fait, j'ai l'impression que les données que je recois sont modifiées quand je les transmet au browser, pourtant je ne modifie pas les streams. Est-ce que j'utilise mal les streams? Est-ce que je rajoute des \r\n au mauvais endroit? Ca fait un bon moment que je cherche et je ne parviens pas à résoudre le problème!
Si quelqu'un a une idée, je suis preneur!
Merci d'avance
Clabecq
import java.io.*;
import java.net.*;
class test {
private static Socket socket, socketToWeb;
private static BufferedReader fromBrowser, fromWeb;
private static PrintWriter toBrowser, toWeb;
public static int port = 12345;
private static ServerSocket s;
public static void main(String[] args) throws IOException {
s = new ServerSocket(port);
while (true) {
try {
socket = s.accept();
//ouverture des flux entrants et sortants du socket
fromBrowser = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
toBrowser = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream())), true);
String str, targetHost = "", httpHeader = "";
while (true) {
str = fromBrowser.readLine();
httpHeader += str + "\r\n";
if (str.startsWith("Host: " )) // On recupere l'host pour savoir ou le socket doit se connecter.
targetHost = str.substring(6);
if (str.length() == 0)
break;
}
socketToWeb = new Socket(InetAddress.getByName(targetHost), 80);// connexion d'un nouveau socket au site web
System.out.println("HOST: " + targetHost);
// ouverture des flux entrants et sortants du socket connecte au site web.
fromWeb = new BufferedReader(new InputStreamReader(socketToWeb
.getInputStream()));
toWeb = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socketToWeb.getOutputStream())),
true);
toWeb.println(httpHeader); // envoi de la requete au site web
String answer = "";
while (true) {
str = fromWeb.readLine();
if (str == null)
break;
answer += (str + "\r\n" );
// reception de la reponse du site web.
}
toBrowser.println(answer); // envoi des données recues au browser.
socket.close();
socketToWeb.close();
} catch (Exception e) {
}
}
}
}