|
| Winsock problem Fra : Jesper |
Dato : 28-06-02 19:12 |
|
Hej.
Mangler lidt hjælp til winsock kontrollen.
For t = 1 to 1000
SendLinie = "*LogData*," & t
tcpserver(0).Senddata SendLinie
next t
Dette skulle sende 1000 linier (*LogData*,1) osv op til 1000 til clienten,
men det
gør den ikke, den sender det som EN linie. *LogData*,1*LogData*,2*LogData*,3
osv.
Nogen der kan fortælle hvorfor den gør sådan....
Jesper G.
| |
Helge Bjørkhaug (28-06-2002)
| Kommentar Fra : Helge Bjørkhaug |
Dato : 28-06-02 21:15 |
|
On Fri, 28 Jun 2002 20:11:53 +0200, "Jesper" <oz5pc@post.tdcadsl.dk> wrote:
>Hej.
>
>Mangler lidt hjælp til winsock kontrollen.
>
>
>For t = 1 to 1000
>SendLinie = "*LogData*," & t
>tcpserver(0).Senddata SendLinie
>next t
>
>
>Dette skulle sende 1000 linier (*LogData*,1) osv op til 1000 til clienten,
>men det
>gør den ikke, den sender det som EN linie. *LogData*,1*LogData*,2*LogData*,3
>osv.
>
>Nogen der kan fortælle hvorfor den gør sådan....
Ja Fordi du ikke sender "linefeed".
For t = 1 to 1000
SendLinie = "*LogData*," & t & VbCrLf
tcpserver(0).Senddata SendLinie
next t
--
Snutten
Fjern helge og .invalid fra mailadressen før du svarer via mail.
| |
Jesper (28-06-2002)
| Kommentar Fra : Jesper |
Dato : 28-06-02 22:55 |
|
> Ja Fordi du ikke sender "linefeed".
> For t = 1 to 1000
> SendLinie = "*LogData*," & t & VbCrLf
> tcpserver(0).Senddata SendLinie
> next t
Godt bud, men det havde jeg prøvet.
Opdagede pludselig ved debug af både client og server, at serveren kørte
alle 1000 linier
af, inden client programmet fik resurser. Indsatte derfor en DOEVENTS inden
next t, så
virker det.
Problemet er nok at jeg kører begge prog. på samme maskine. Det skal de ikke
når de er
færdige....
Jesper....
| |
Tomas Christiansen (29-06-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 29-06-02 22:43 |
|
Jesper skrev:
> Godt bud, men det havde jeg prøvet.
Så er det enten fordi du ikke har forklaret godt nok hvad du mener at
dit problem er, eller også fordi du ikke helt forstår hvad det er der
sker, når du sender noget via TCP/IP.
> Opdagede pludselig ved debug af både client og server, at serveren
kørte
> alle 1000 linier af, inden client programmet fik resurser. Indsatte
derfor
> en DOEVENTS inden next t, så virker det.
Problemer er at du skriver om "linier", men når man sender over en
TCP-forbindelse, sender man bytes. Afhængig af hvad, det underliggende
net kan klare, bliver disse "bytes" splittet op i mindre pakker (som
igen kan risikere at blive splittet op i endnu-mindre pakker
undervejs).
Det er rigtigt, at den aktuelle implementation af Winsock-kontrollen
sender _mindst_ én pakke for hver gang man bruger .SendData, men der
er mig bekendt ingen garanti for at fremtidige versionen af
Winsock-kontrollen vil opføre sig på samme måde. Husk på at ét
..SendData-kald kan resultere i at modtageren modtager mere end én
pakke.
> Problemet er nok at jeg kører begge prog. på samme maskine. Det skal
de ikke
> når de er færdige....
Nej. Du kan ikke være sikker på nogetsomhelst!
Hvis du har en super-duper hurtig maskine som sender over en
super-duper hurtig forbindelse, og du har en langsom-sløv maskine til
at modtage, kan du være vis på at den ikke får tid til andet en at
modtage pakkerne og lægge dem i en buffer - DIT program får stort set
ingen CPU-tid.
Forsøg viser (som du selv har opdaget) at DoEvents har en gavnlig
virkning, men jeg mener ikke at du kan vide dig sikker!
Der er (så vidt jeg kan se) intet i vejen for at Winsock kontrollen
(måske ikke nu, men i fremtiden), samler flere modtagne pakker op, og
samler dem sammen til én stor, som bliver leveret til dit program.
-------
Tomas
| |
Jesper (30-06-2002)
| Kommentar Fra : Jesper |
Dato : 30-06-02 14:17 |
|
<Der er (så vidt jeg kan se) intet i vejen for at Winsock kontrollen
<(måske ikke nu, men i fremtiden), samler flere modtagne pakker op, og
<samler dem sammen til én stor, som bliver leveret til dit program.
Hvor lang tid venter den så på at sende pakken? Hvor stor skal pakken være
før den sendes?
Syntes ikke det lyder rigtigt....
Jesper....
| |
Tomas Christiansen (30-06-2002)
| Kommentar Fra : Tomas Christiansen |
Dato : 30-06-02 21:54 |
|
Jesper skrev:
> <Der er (så vidt jeg kan se) intet i vejen for at Winsock kontrollen
> <(måske ikke nu, men i fremtiden), samler flere modtagne pakker op,
og
> <samler dem sammen til én stor, som bliver leveret til dit program.
>
> Hvor lang tid venter den så på at sende pakken? Hvor stor skal
pakken være
> før den sendes?
> Syntes ikke det lyder rigtigt....
Okay, det var nu altså _modtagelsen_ og ikke _afsendelsen_ af pakker,
som jeg skrev om lige her...
Sålænge at MS ikke eksplicit har sagt (eller skrevet) så SÅDAN virker
Winsock-kontrollen uforanderligt, har de ret til at ændre dens
opførsel uden varsel. Det er i virkeligheden et helt generelt problem
med mange medleverede kontroller: Man ANER ikke hvad er vil ske med
dem i næste version.
Da du ikke har andre muligheder (sålænge du bruger MS's
Winsock-kontrol), skal du blot notere dig denne usikkerhed - evt.
dokumentere det i dit program - og så leve med den usikkerhed.
Der hvor fejlen ofte begås er, at mange forudsætter en uforanderlig
"verden", når de programmerer, og har historien vist noget, så er det
at DET ikke holder vand! Blot en lille ubetydelig patch fra MS, som
måske har med noget helt andet at gøre, kan bevirke at komponenter
reagerer radikalt anderledes.
-------
Tomas
| |
|
|