Registreer FAQ Berichten van vandaag


Ga terug   Scholieren.com forum / Technologie / Software & Hardware
Reageren
 
Topictools Zoek in deze topic
Oud 07-07-2004, 18:17
Verwijderd
Hallo,

Ik zou aanvankelijk bezig met iets voor MSN Messenger. Maar ben toch maar bezig gegaan met het maken van een IRC-like chatservertje (en client).

Ik gebruik daarvoor een TServerSocket met non-blocking thread gebaseerde sockets. In ClientExecute gebruik ik dan voor het binnenhalen van data dus TWinSocketStream.Read.

Ik had eerst zoiets als dit (alleen relevante delen laat ik zien):

Citaat:
procedure TCSThread.ClientExecute;
var
Buf: array[0..MAXLINECHARS - 1] of Char;

begin
// ...

BytesRead := Stream.Read(Buf, 512);

// ...
end;
Stream is van het type TWinSocketStream en MAXLINECHARS = 1024. Het zou dus nooit moeten kunnen dat er teveel bytes naar Buf worden geschreven, niet door Read in ieder geval, want die mag maximaal 512 bytes naar Buf schrijven.

Dit gebeurde echter wel... Als ik met de client een berichtje groter dan 512 bytes verzond naar de server dan gaf ie een Access violation at ... : write error at .... Er werd dus blijkbaar getracht meer dan 512 bytes naar Buf te schrijven...

Later veranderde ik dit maar eens in 1024 (de precieze grootte van Buf dus), en toen deed ie het wel...

Weet iemand misschien hoe dit zit?? Komt het door een fout in mijn besturingssysteem, of is het meer een fout van de Read functie? Ik heb Windows 2000, en heb recentelijk alle essentiële updates geïnstalleerd! (Misschien dat het daaraan ligt...?)
Met citaat reageren
Advertentie
Oud 08-07-2004, 20:16
JustMe2003
JustMe2003 is offline
Ik zie ook niet direct het probleem maar ben dan ook niet zo bekend met TServerSocket. Een aanrader is echter Indy, dit systeem heeft een eigen buffersysteem e.d. en maakt het echt wel gemakkelijk om sockets te gebruiken in delphi.

Indy kunt je gemakkelijk vinden op www.indyproject.org/download/Borland.html
Met citaat reageren
Oud 08-07-2004, 22:12
Verwijderd
Citaat:
JustMe2003 schreef op 08-07-2004 @ 21:16 :
Ik zie ook niet direct het probleem maar ben dan ook niet zo bekend met TServerSocket. Een aanrader is echter Indy, dit systeem heeft een eigen buffersysteem e.d. en maakt het echt wel gemakkelijk om sockets te gebruiken in delphi.

Indy kunt je gemakkelijk vinden op www.indyproject.org/download/Borland.html
Ik gebruik Delphi 6 Enterprise, en daar zitten de Indy components al bij. Ik wou echter gewoon de TServerSocket en TClientSocket gebruiken. Is ook heel simpel. Alleen is het een beetje eigenaardig dat je de precieze buffergrootte schijnt op te moeten geven... Maar misschien ligt dat aan de updates die ik recentelijk gedownload heb. Anders weet ik het ook niet
Met citaat reageren
Advertentie
Reageren


Regels voor berichten
Je mag geen nieuwe topics starten
Je mag niet reageren op berichten
Je mag geen bijlagen versturen
Je mag niet je berichten bewerken

BB code is Aan
Smileys zijn Aan
[IMG]-code is Aan
HTML-code is Uit

Spring naar


Alle tijden zijn GMT +1. Het is nu 23:44.