Momenteel ben ik bezig met een botje voor MSN. Het gaat allemaal geweldig, MSNP7 is niet zo moeilijk
De bot is in het stadium dat ie automagisch inlogt, vriendenlijstveranderingen verwerkt, berichten kan sturen én ontvangen. Hoewel, die laatste twee niet helemaal.
Als je een bericht binnenkrijgt van een bepaalde gebruiker komt er bijv. het volgende lijntje tekst binnenrollen: "MSG sjakie@hotmail.com Sjakie 124". MSG geeft aan dat er een bericht aankomt, daarna het passport van de gebruiker en zijn schermnaam. Als laatste is het aantal bytes van het bericht dat eraan komt.
"\r" en "\n" staan er voor de duidelijkheid even bij
, ze tellen ieder als 1 byte...
In java maak ik gebruik van een standaard socketverbinding en daaruit gemaakte IO-streams:
Als ik nu met een loopje 124x een karakter uitlees dmv "stringBuffer.append((char) in.read())" kom ik precies uit en is iedereen tevree
Het probleem:
Als onze Sjakie nu besluit om streepjes op de e te gaan zetten gaat het mis :(:
Het aantal karakters is nu dus ineens minder dan het aantal bytes
Leuker wordt het nog met de Euro, want:
Die telt ineens als 3 bytes
Dit gaat dus helemaal de soep in, want de in.read() methode blockt nu, omdat er verder niks meer is
Ook tijdens het maken van een bericht(dan moet ik het aantal bytes van een string weten...) gaat dit fout. Is er een (nette) manier om hieromheen te werken? Of, anders gevraagd: Hoe kan ik weten hoeveel bytes een bep. char inneemt? Dan kan ik op een zinnige manier een teller bijhouden om te kijken of ik al aan 't eind zit 
Als je een bericht binnenkrijgt van een bepaalde gebruiker komt er bijv. het volgende lijntje tekst binnenrollen: "MSG sjakie@hotmail.com Sjakie 124". MSG geeft aan dat er een bericht aankomt, daarna het passport van de gebruiker en zijn schermnaam. Als laatste is het aantal bytes van het bericht dat eraan komt.
code:
1
2
3
4
5
6
| MSG sjakie@hotmail.com Sjakie 124\r\n MIME-Version: 1.0\r\n Content-Type: text/plain; charset=UTF-8\r\n X-MMS-IM-Format: FN=MS%20Serif; EF=; CO=; CS=0; PF=22\r\n \r\n hee Ed! |
"\r" en "\n" staan er voor de duidelijkheid even bij
In java maak ik gebruik van een standaard socketverbinding en daaruit gemaakte IO-streams:
code:
1
2
| in = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8")); out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8")); |
Als ik nu met een loopje 124x een karakter uitlees dmv "stringBuffer.append((char) in.read())" kom ik precies uit en is iedereen tevree
Het probleem:
Als onze Sjakie nu besluit om streepjes op de e te gaan zetten gaat het mis :(:
code:
1
2
3
4
5
6
| MSG sjakie@hotmail.com Sjakie 126\r\n MIME-Version: 1.0\r\n Content-Type: text/plain; charset=UTF-8\r\n X-MMS-IM-Format: FN=MS%20Serif; EF=; CO=; CS=0; PF=22\r\n \r\n héé Ed! |
Het aantal karakters is nu dus ineens minder dan het aantal bytes
code:
1
2
3
4
5
6
| MSG sjakie@hotmail.com Sjakie 122\r\n MIME-Version: 1.0\r\n Content-Type: text/plain; charset=UTF-8\r\n X-MMS-IM-Format: FN=MS%20Serif; EF=; CO=; CS=0; PF=22\r\n \r\n €40 |
Die telt ineens als 3 bytes
Dit gaat dus helemaal de soep in, want de in.read() methode blockt nu, omdat er verder niks meer is
edit:
/me is perfectionist
, zag een piepklein foutje 
/me is perfectionist