22. august 2003 - 10:51Der er
14 kommentarer og 1 løsning
Java låser min pc
Jeg har lavet en netværksapplikation hvor en klient kan kontakte en server som derefter leverer en liste over sine filer. Klienten ken herefter hente filer ved at sende et filnavn og derefter returnerer serveren filen. Det virker fint 1. Gang derefter låser klienten... Jeg kører hvert fildownload som en tråd så jeg kan ikke helt fatte hvorfor... Nedenstående metode er den som låser programmet
public void sendFilRequest(String fil) { try { objectOutputStream = new ObjectOutputStream(socket.getOutputStream()); objectOutputStream.writeObject(fil); File f = new File("C:\\"+fil); InputStream instr = socket.getInputStream(); OutputStream outstr = new FileOutputStream(f); int n; byte[] b = new byte[1000]; while((n = instr.read(b)) >= 0)//******Det sker et sted herunder { System.out.println("skriver"); outstr.write(b, 0, n); } } catch(Exception e) { System.out.println(e); } }
Jeg kan bare ikke forstå hvordan det kan ske når jeg kører den som en tråd...
instr.read fejler først når det i den anden ende lukker socket.
Umiddelbart tror jeg at du skal have omstruktureret din logik.
Alternativ 1:
connection less client connecter sender 1 kommando modtager 1 svar server lukker når svar er sendt
Alternativ 2
connection state protokol client sender 1 kommando server sender antal bytes der kommer sender sender bytes client modtager bytes og ved når den har fået det hele
Her bliver den ved med at hente indtil der ikke er flere bytes at hente
byte[] b = new byte[1000]; while((n = instr.read(b)) >= 0) { System.out.println("skriver"); outstr.write(b, 0, n); } Hvordan ville du skrive det hvis du kendte antallet af bytes i forvejen
Jeg skal nok oprette et sprgsml så du kan få points for det her...
klient kontakter server. server returnerer en liste over filer. klient sender request om at hente en fil. klient åbner en ny serversocket og venter server kontakter klienten på den nye socket og leverer filen osv.
på den måde er der altid en forbindelse åben imellem server og klient hvor der udveksles fillister og requests om filer. hvergang en fil skal sendes, åbnes der en anden connection imellem serveren og clienten og lukkes igen efter endt overførsel...
I FTP taler man om en "control connection" og en "data connection".
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.