18. april 2002 - 21:41Der er
5 kommentarer og 1 løsning
Kommandoer og data på samme socket - hvad nu
Jeg har nedenstående metode (som nok skal laves om) som skriver "data" til en fil. Jeg har en socket jeg læser kommandoer (tekst) fra, og samtidigt vil jeg gerne sende en fil over denne socket. Men hvordan det? Jeg kan jo ikke koble min sockets inputstream til min fil, da den ikke lukkes når filens data er skrevet, men der fortsat kommer kommandoer ind på denne inputstream.
Nogle foreslag, skal jeg tjekke på de sendte data inden i denne metode?
[SNIP] public synchronized void save(InputStream data) throws FileNotFoundException, IOException { File f = new File("file"); FileOutputStream fos = new FileOutputStream(f); byte[] buffer = new byte[2048]; int read; while ((read = data.read(buffer)) != -1) { fos.write(buffer, 0, read); } data.close(); fos.close(); } [/SNIP]
Jeg mener ikke du på nogen måde kan kende forskel på fil- og kommando data i en rå InputStream, du kommer nok til at lade senderen indsætte flag i streamen. Hvad med at pakke din "elementer" ind i xml-tags, det ville da vel i det mindste gøre designet mere fleksibelt.
Du lukker bare din fils output når du synes den skal lukkes. Inputstream og outputstream er kun koblet sammen fordi du læser og skriver til/fra begge. Du kører så ovennævnte metode fra det øjeblik din klient ved (via kommando) at nu kommer der en fil, til filen er slut. Hvis du har en afsluttende kommando som du søge efter skal det ind i koden, og så skal denne selvfølgelig ikke skrives til filens outputstream.
En god ide ville også være at sende størrelsen på filen/forsendelsen i forbindelse med den indledende kommando, så klienten ikke behøver at parse hele input efter en afsluttende sætning.
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.