06. september 2004 - 13:42Der er
9 kommentarer og 1 løsning
prob. med java webserver
Hej Java folks, jeg har gang i Nordfalks webserver eksempel (javabog.dk kap. 16.2), og forsøger at udbygge det.
Mit problem består i at 'streame' billeder ud til klienten, jeg har forsøgt at lave en metode 'hentBinFil' der skulle klare opgaven, men jeg får kun stack-adressen ud til klienten :)
Jeg har vedlagt hele koden, og er mere end tilfreds med et skub i den rigtige retning, jeg behøver ikke at få det hele foræret (skulle jo gerne lære lidt :)
-------- Kode start --------------------------------------- import java.io.*; import java.util.*; import java.net.*;
public class JavaServer { public static void main(String[] arg) { int antal = 0; boolean binfil = false; OutputStream binside = null;
konsol("Min Java web-server ver. 0.0.1");
try { ServerSocket socket = new ServerSocket(80);
while (true) { Socket forb = socket.accept(); PrintWriter ud = new PrintWriter(forb.getOutputStream()); BufferedReader ind = new BufferedReader(new InputStreamReader(forb.getInputStream()));
public static String hentFil(String filsti) throws IOException { String html = "";
FileReader fil = new FileReader("c:\\java\\webserver" + filsti); BufferedReader ind = new BufferedReader(fil);
String linie = ind.readLine(); while (linie != null) { html = html + linie; linie = ind.readLine(); }
return html; }
public static OutputStream hentBinFil(String filsti) throws IOException { InputStream is = new FileInputStream("c:\\java\\webserver" + filsti); OutputStream os = new FileOutputStream("c:\\java\\webserver\\tmp\\" + filsti);
// brug buffere i læsning og skrivning (mere effektivt) punkt A is = new BufferedInputStream(is); os = new BufferedOutputStream(os);
// læs og skriv én byte ad gangen (ret ineffektivt) punkt B int b = is.read(); while (b != -1) { os.write(b); b = is.read(); }
is.close(); os.flush(); os.close();
return os; }
private static void konsol(String tekst) { System.out.println("Server--> " + tekst); } } -------- Kode slut ---------------------------------------
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Jeg må indrømme at jeg har mine problemer :) jeg fandt et eksempel på nettet og har forsøgt at lave hentBinFil() om så den retunerer et byte array.
Jeg tror egentligt det virker, men jeg kan ikke regne ud hvordan jeg så får sendt det ud til klienten vha. forb.getOutputStream() med .write
Måske hvis du smed et eksempel alligevel :) så kunne jeg studere det og så måske endda forstå det.
-------- kode start ------------------------------------ public static byte[] hentBinFil(File fil) throws IOException { InputStream is = new FileInputStream(fil); // nyt filobjekt long length = fil.length(); // filstørrelse
if (length > Integer.MAX_VALUE){ }
byte[] b = new byte[(int)length]; // byte array
int o = 0; int n = 0; while (o < b.length && (n=is.read(b, o, b.length-o)) >= 0) o += n;
if (o < b.length) // alle bytes skal med throw new IOException("Fik ikke hele filen " + fil.getName());
is.close(); // luk return b; // retuner } -------- kode slut ------------------------------------
public byte[] readfile(String filename) throws IOException { byte[] b = new byte[(int) (new File(filename)).length()]; InputStream is = new FileInputStream(filename); is.read(b); is.close(); return b; }
Jeg fik det til at virke, tak for eksemplerne, det var mere simpelt end jeg havde troet :)
Jeg fortsætter med at gøre den flertrådet iht. Nordfalks bog, så skal der løses lidt problemer med f.eks. at klienten 'resetter' forbindelsen det laver en undtagelse der afslutter programmet. Jeg håber på at når trådene er indført så er det kun den enkelte tråd der vil blive afsluttet hvis klienten resetter.
Tak for hjælpen.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.