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