20. juli 2005 - 12:25Der er
16 kommentarer og 1 løsning
read() kaldes for hurtigt på en socket.
Jeg benytter Socket til at tage imod en lang datastreng som kan være delt over flere pakker.
Hvis ikke linien "while(!hostIn.ready()){};" er der kaldes "byteValue = hostIn.read();" for hurtigt... altså før data er klar, og der kommer en exception.
Mit probelm er nu blot at når der kommer en ny data-pakke er data ikke lige klar, og derfor kommer der en exception, hvordan håndteres dette?
grunden til at jeg ikke bruger readline, er at jeg er interesseret i alle karakterer, og new-line, osv. Hvis jeg bruger readLine() bliver nogle af disse da ikke sorteret fra???? ..og ville det løse mit problem??
der gav du mig en ledetråd, nu har jeg ændret mySocket.setSoTimeout(1000); til mySocket.setSoTimeout(10000); og det virker nu. Jeg vil lige prøve at undlade at bruge en wrapper som du skriver.
hostOut = new BufferedWriter(new OutputStreamWriter(mySocket.getOutputStream(),"UTF-8")); // hostIn = new BufferedReader(new InputStreamReader(mySocket.getInputStream(),"UTF-8")); hostIn = new InputStreamReader(mySocket.getInputStream(),"UTF-8");
ok, jeg vil så nok bruge en readLine() i stedet for. Hvad mener du lige præcist med "(undtagen \r\n som jo er implicitte i linie begrebet)"? kan jeg blot hver gang jeg har modtaget en linie indsætte \r\n bagefter? giver et det samme?
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.