Har byggt en simpel chatt i Java, men det saknas alltid tre tecken.

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011

Har byggt en simpel chatt i Java, men det saknas alltid tre tecken.

Då det är mycket kod tar jag mig friheten att lägga upp den här:
Start klass som startar 2 klienter och en server: http://codepaste.net/ukcauu
Klassen för klienter: http://codepaste.net/2zyxjs
Klassen för servern: http://codepaste.net/2kbono

Applikationen funkar hyfsat, finns givetvis en del kvar att göra, men det finns en bugg jag inte förstår mig på. När jag skickat något att skriva ut så saknas alltid de tre sista teckna. Om jag skickar t ex "Jag äter ett päron" då visas bara "Jag äter ett pär". Har grubblat och testat fram och tillbaka men lyckas inte hitta varför detta händer. Blir även en liknande situation när jag skriver in 1 tecken, då syns ingenting alls.

EDIT: Efter ännu fler tester verkar det vara fler tecken som försvinner ju mer text jag matar in.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
i din garderob
Registrerad
Sep 2007
Skrivet av Baxtex:

Då det är mycket kod tar jag mig friheten att lägga upp den här:
Start klass som startar 2 klienter och en server: http://codepaste.net/ukcauu
Klassen för klienter: http://codepaste.net/2zyxjs
Klassen för servern: http://codepaste.net/2kbono

Applikationen funkar hyfsat, finns givetvis en del kvar att göra, men det finns en bugg jag inte förstår mig på. När jag skickat något att skriva ut så saknas alltid de tre sista teckna. Om jag skickar t ex "Jag äter ett päron" då visas bara "Jag äter ett pär". Har grubblat och testat fram och tillbaka men lyckas inte hitta varför detta händer. Blir även en liknande situation när jag skriver in 1 tecken, då syns ingenting alls.

EDIT: Efter ännu fler tester verkar det vara fler tecken som försvinner ju mer text jag matar in.

Försvinner det något även om du bara skriver in bokstäver mellan A-Z?

Bilanaloger är som Volvo — varenda svenne kör med dem

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av Teknocide:

Försvinner det något även om du bara skriver in bokstäver mellan A-Z?

Japp.

Testade sätta ut några printlns nu, både när jag skickar paketet från klienten, när servern skickar tillbaka och när klienten motager paketet.

I de 2 första fallen verkar allt vara med, alla tecken finns med. Men i det sista fallet när klienten motager paketet och ska skriva ut det, då fattas det minsann tecken. Så det borde väl vara något här som händer, dvs i ListenerThread klassen som ligger i UDPClient. Spontant känns det som att det är något fel med packet.getLength(), att den på något vis inte får med allt. Men vad vet jag, är helt grön på nätverksprogrammering än så länge.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2001

Hur fungerar det om du istället för message.length använder byte-array:ens längd i UPDServer.run när du ska skicka ut till klienterna? En char kan vara längre än en byte beroende på encoding.

Phenom II X6 1055T @ 3.5GHz, Sapphire HD5850 Xtreme, ASUS M4A89GTD Pro/USB3, 12GB Corsair XMS3, Intel 320 SSD 120GB, Corsair HX620, Fractal Design R3

Trädvy Permalänk
Medlem
Plats
Skåne
Registrerad
Jan 2011
Skrivet av FoggyWall:

Hur fungerar det om du istället för message.length använder byte-array:ens längd i UPDServer.run när du ska skicka ut till klienterna? En char kan vara längre än en byte beroende på encoding.

Använde packet.getLength() istället och det verkar ha löst det, tack!
Det låter logiskt. Jag trodde att en char==byte, men googlade nu och precis som du säger varierer det med vilken teckenkodning det gäller.

Asrock P67 Extreme 4 | i5 2500K@4,5Ghz | Asus GTX 970 black | 2x Intel 520 180gb, 2x WD blue 5tb | 8GB Corsair XMS3 + 8GB Hyper x Fury | EVGA Supernova G2 750W Gold | Silverstone FT02

https://prism-break.org/sv/

Trädvy Permalänk
Medlem
Plats
Borås
Registrerad
Okt 2002

Kan det bli flera paket som ska tas emot i ett meddelande eller är det alltid så att allting är samlat i samma paket? Tänker om du skriver ut första paketet men missar nästkommande på något sätt. Hur vet man när det inkommande meddelandet är slut? Eller sköts detta automatiskt av någon inbyggd klass som anropas i java?

Har inte kollat koden så noga och är inte bra på java heller. Var bara en spontan fundering som jag fick.

Edit: Sent svar, ni hade löst det ser jag.

Trädvy Permalänk
Medlem
Plats
Malmö
Registrerad
Jul 2001

@Baxtex: Gutt! Lycka till med nätverksprogrammeringen

Phenom II X6 1055T @ 3.5GHz, Sapphire HD5850 Xtreme, ASUS M4A89GTD Pro/USB3, 12GB Corsair XMS3, Intel 320 SSD 120GB, Corsair HX620, Fractal Design R3