wenn ich Daten an ein PHP Script sende, und mir dieses irgendwelche Zeichen mit echo ausgibt, hängt folgendes Script immer ein ? an die Zeichenkette mit dran.
Ich vermute, dass es an/in der while-Schleife liegt, welche an incoming immer ein Char dranhängt...
Mein Quellcode:
Java:
packagede.tests;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.MalformedURLException;importjava.net.URL;importjava.net.URLConnection;publicclass dbreadandwrite {privateURL sitepath;privateURLConnection con;publicdbreadandwrite(URL sitepath){this.sitepath = sitepath;}publicvoidsetSitePath(URL sitepath){this.sitepath = sitepath;}publicURLgetSitePath(){returnthis.sitepath;}publicvoidsend(String data)throwsIOException{if(this.con ==null){this.con =this.sitepath.openConnection();}if(this.con.getDoOutput()==false){this.con.setDoOutput(true);}OutputStream out =this.con.getOutputStream();
out.write(data.getBytes());
out.flush();}publicStringread()throwsIOException{if(this.con ==null){this.con =this.sitepath.openConnection();}InputStream in =this.con.getInputStream();int c =0;StringBuffer incoming =newStringBuffer();while(c >=0){
c = in.read();
incoming.append((char) c);}return incoming.toString();}publicstaticvoidmain(String[] args){try{URL url =newURL("http://localhost/test.php");
dbreadandwrite con =newdbreadandwrite(url);try{
con.send("foo=bar");System.out.println(con.read());}catch(IOException e){System.out.println(e);}}catch(MalformedURLException e){System.out.println(e);}}}
Vllt. erkennt jemand das Problem auf anhieb? Ich komm nicht drauf...
Kleine Vermutung: du machst ja in der while-Schleife ein
Code:
in.read()
, das liefert dir ein int, das ein byte repräsentieren soll, aber du castest es auf ein char. Vielleicht ist das schon problematisch? Versuch mal das int in ein byte zu casten, und diese bytes dann zu sammeln (oder gleich ein byte-Array mit
Ich meinte, du liest jedes Byte einzeln aus, anstatt gleich eine Menge von Bytes auf einmal auszulesen:
Java:
InputStream in =...byte[] buffer =newbyte[256];// Oder auch 1024...StringBuilder sb =...while(in.read(buffer)!=-1){// hier etwas mit den 256 eingelesenen Bytes im Array buffer machen.
sb.append(newString(buffer));// Achtung, beim letzten Durchlauf ist das Array evtl. nicht komplett mit bytes gefüllt}
Das geht halt etwas schneller, als die Daten byte für byte auszulesen Aber dein Fehler mit dem ? wird ja mit frostbytes Vorschlag gut gelöst.