Dit programma bestaat uit 2 onderdelen: een server en een client.
Doelstelling: De client moet de tekst die de server verstuurt, op het scherm weergeven. Soms verstuurt de server slechts 1 zin, echter het kan ook voorkomen dat de server een aantal zinnen, gescheiden met \n (newline) achter elkaar verstuurt. Als alle tekst van de server op het scherm staat, mag de gebruiker input geven. De tekst die de gebruiker invoert, wordt naar de server gestuurd. Als reactie op de invoer v.d. gebruiker, kan het zijn dat de server weer tekst wil versturen, en begint het proces van voor af aan.
Nu heb ik de volgende stukjes code:
Dit heeft als resultaat dat de client 1 regel input van de server leest. Daarna mag de gebruiker 1 regel tekst naar de server sturen, waarna het proces weer opnieuw begint. Zodra de server het woord bye stuurt, wordt de loop beëindigd.
Dit werkt prima, maar de client leest maar 1 regel input van de server, waarna de gebruiker onmiddelijk om invoer wordt gevraagd. Zodra de server nu meerdere regels tekst na elkaar verstuurt, gaat het mis. Ik moet de client dus zien duidelijk te maken, dat hij alle input van de server op het scherm zet, en dus niet slechts 1 regel alvorens de gebruiker om invoer wordt gevraagd.
Bovenstaande code leest wel keurig alle input van de server, maar raakt dan in een oneindige loop, waardoor de gebruiker niet meer om input wordt gevraagd. Het feit dat hij in een oneindige loop raakt, vind ik vreemd, vanwege de volgende tekst in de java api:
Kan er iemand mij vertellen hoe ik dit probleem kan oplossen?
Doelstelling: De client moet de tekst die de server verstuurt, op het scherm weergeven. Soms verstuurt de server slechts 1 zin, echter het kan ook voorkomen dat de server een aantal zinnen, gescheiden met \n (newline) achter elkaar verstuurt. Als alle tekst van de server op het scherm staat, mag de gebruiker input geven. De tekst die de gebruiker invoert, wordt naar de server gestuurd. Als reactie op de invoer v.d. gebruiker, kan het zijn dat de server weer tekst wil versturen, en begint het proces van voor af aan.
Nu heb ik de volgende stukjes code:
Java:
1
2
3
| audioSocket = new Socket("localhost", 4444); out = new PrintWriter(audioSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(audioSocket.getInputStream())); |
Java:
1
2
3
4
5
6
7
8
9
10
11
| while ((fromServer = in.readLine()) != null) { System.out.println("Server: " + fromServer); if (fromServer.equals("Bye.")) break; fromUser = stdIn.readLine(); if (fromUser != null) { System.out.println("Client: " + fromUser); out.println(fromUser); } } |
Dit heeft als resultaat dat de client 1 regel input van de server leest. Daarna mag de gebruiker 1 regel tekst naar de server sturen, waarna het proces weer opnieuw begint. Zodra de server het woord bye stuurt, wordt de loop beëindigd.
Dit werkt prima, maar de client leest maar 1 regel input van de server, waarna de gebruiker onmiddelijk om invoer wordt gevraagd. Zodra de server nu meerdere regels tekst na elkaar verstuurt, gaat het mis. Ik moet de client dus zien duidelijk te maken, dat hij alle input van de server op het scherm zet, en dus niet slechts 1 regel alvorens de gebruiker om invoer wordt gevraagd.
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| while ((fromServer = in.readLine()) != null) { while ((fromServer = in.readLine()) != null) { System.out.println("Server: " + fromServer); } System.out.println("Server: " + fromServer); if (fromServer.equals("Bye.")) break; fromUser = stdIn.readLine(); if (fromUser != null) { System.out.println("Client: " + fromUser); out.println(fromUser); } } |
Bovenstaande code leest wel keurig alle input van de server, maar raakt dan in een oneindige loop, waardoor de gebruiker niet meer om input wordt gevraagd. Het feit dat hij in een oneindige loop raakt, vind ik vreemd, vanwege de volgende tekst in de java api:
Ik zou verwachten dat als de server geen tekst meer verzendt, het einde van de stream is bereikt, en de loop dus zou moeten stoppen.Readline() returns: A String containing the contents of the line, not including any line-termination characters, or null if the end of the stream has been reached
Kan er iemand mij vertellen hoe ik dit probleem kan oplossen?
[ Voor 7% gewijzigd door Verwijderd op 13-12-2005 18:24 ]