//modtag - brug "OnRead" event for clientsocket procedure ClientSocketRead(Sender: TObject; Socket: TCustomWinSocket);
begin .. text:=Socket.ReceiveText; .. end
Det har hidtil virket fint (når jeg kun sender omkring 200 tegn), men nu sender jeg måske N-tegn hvor N<5000. Problemet er at det virker som om teksten bliver delt op og "OnRead" bliver kaldt flere gange, men jeg ville gerne have alt teksten overført i en "pakke" og ikke få den delt op (og dermed også undgå at "OnRead" bliver kaldt flere gange når jeg bare overfører én lang tekst.
Hvordan kan jeg gøre dette? Skal jeg bruge noget andet end "sendtext()" eller ???
Jeg er lidt rusten i TCP/IP men når nu ingen andre har svaret. Data sendt med TCP dvs. TServerSocket/TClientSocket vil altid blive opdelt hvis data mængden overstiger en vis mængde, hvornår der bliver opdelt kommer an på hvilke net IP pakkerne skal sendes igennem, jeg mener at max pakke størrelse på f.eks. ethernet er 1500 bytes. Dvs. at når du benytter TServerSocket/TClientSocket så skal du opfinde din egen protokol så du ved hvornår en ny stak data starter og hvornår det er slut. En enkelt måde kunne være at sendet et start tegn/streng når du starter med at sende og et slut tegn/streng når de sidste data er sendt således at modtageren ved at nu kommer der ikke mere.
Jeg havde jo nok lidt forventet det svar - men mange tak alligevel :-)
Det jeg synes er træls er at ClientSocketRead bliver kaldt flere gange - hvordan samler man de sendte data på en pæn måde - hvis jeg selv deler det op i små datapakker og sender vha. ServerSocket.Socket.Connections[0].SendText(text) flere gange i træk synes jeg også den samler nogle af mine pakker (med mindre jeg sætter sleep(200) eller noget ind mellem hver gang jeg sender).
Jeg synes der burde være noget kode man bare kunne bruge i stedet for selv at skulle lave en eller anden nogenlunde fornuftig løsning? Hvad med at bruge sendstream eller sendbuf i stedet for?
Lav din egen header - kunne f.eks. være START_1583 og efterfulgt af 1583 tegn, hvis det er 1583 tegn der skal sendes. Således ved du på modtagersiden at der skal være 1583 tegn til sidst (foruden "START_1583 ").
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.