System.out.println("done..."); } catch (IOException ioe) { System.err.println("Couldn't get I/O for the connection to: " + _loginHost); //$NON-NLS-1$ }
\end{kodestump}
I denne sekvens får jeg læst det korrekte ind i variablen received (i toppen af sekvensen), og programmet påstår, at det sender username (men jeg ved det faktisk ikke 100%). Når jeg har afsendt username vil jeg gerne have en ny besked og handle efter den, men det lader ikke til, at der kommer noget tilbage. I hvert fald er variablen received tom, når jeg forsøger at skrive den ud...
Jeg tror at der sker det at den første read løkke læser prompten for brugernavn korrekt men at fordi read er blocking venter den på mere data og returnerer først -1 når serveren timer ud. Så udskriver programmet korrekt prompten og sender brugernavn, men det er for sent.
Okæh, der er klart noget i vejen. Jeg kan ikke se andet end min egen overskrift og så mit sidste indlæg. swaq og arne, jeg kan ikke se, hvad I har skrevet. Gider I skrive det igen?
Der er mange andre spørgsmål, jeg heller ikke kan se teksten på, men det seneste går fint... Weird...
Min kommentar var et gæt på årsagen til problemet:
Du læser med read indtil du får -1. Jeg tror at du korrekt læser prompten for brugernavn men at du venter på mere input (read er blocking) indtil serveren timer ud og så returnerer read -1. Derefter sender du brugernavn, men så er det jo for sent.
Og løsningen vil være kun at læse indtil du har læst prompten for brugernavm og så sende brugernavnet. Det er jo også den måde det sker ved manuel login. Man taster brugernavn ligeså snart der promptes for det.
arne_v: Der går ikke ret lang tid mellem læsning af prompt og afsendelse af brugernavn (< 0.5 sek ville jeg godt vædde om), og "i hånden" kan der gå meget længere tid. Jeg kan bare ikke helt forstå hvorfor jeg ikke kan læse på samme måde én gang til - det skulle vel være i orden?
Det virker som om den anden løkke terminerer med det samme (hvilket godt kan passe med din teori), men som sagt forstår jeg det ikke. Hvis den pågældende socket var blevet termineret, skulle jeg jo få en exception, når jeg forsøger at bruge den...
Damn, Arne. Der var den... Jeg havde forsøgt at lave en wait() på min inputsocket, men det gik ikke rigtigt. Den blev i hvertfald ikke notified senere...
Tak for'et...
Mit næste problem er selvfølgelig at finde ud af hvor lille en sleep() jeg kan bruge, og samtidig være 99.9% sikker på, at den faktisk er klar. Men det kan jeg jo klare ved at sleep()'e nogle millisekunder, checke om input er klar osv.
Jeg er lige kommet tilbage fra en hinsidig verden (læs: Roskilde Festival), hæ hæ... Kan se Arne_v (endnu engang) har udført et glimragende og fremstående stykke arbejde, hvorfor jeg skal fraholde mig fra at uddybe yderligere. Bortset fra det er du meget velkommen til at anvende min kode (hvis du kan få den til at virke :O) Arne_v har forresten hjulpet med den kode også :-)
Arne: Det har været 100ms siden lidt før 00:10:39... Det er klart, at login ikke har haft mig i tankerne under design ;o), men i øvrigt mener jeg, at Karthago bør ødelægges, at tofu, oliven og kikærter er stærkt overvurderet som menneskeføde, samt at applikationsintegration via telnet og login-interface er noget lort... Så det...
Tak for hjælpen - jeg uddeler en skæv fordeling...
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.