Scholieren.com forum

Scholieren.com forum (https://forum.scholieren.com/index.php)
-   Software & Hardware (https://forum.scholieren.com/forumdisplay.php?f=20)
-   -   [Prog.] Delphi: TWinSocketStream.Read (https://forum.scholieren.com/showthread.php?t=894254)

12Trix 07-07-2004 18:17

[Prog.] Delphi: TWinSocketStream.Read
 
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... :s

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...?)

JustMe2003 08-07-2004 20: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

12Trix 08-07-2004 22:12

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 :s


Alle tijden zijn GMT +1. Het is nu 19:03.

Powered by vBulletin® Version 3.8.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.