|
| WinSocket Fra : Niels Borg |
Dato : 14-01-03 22:25 |
|
Hej,
Jeg har skrevet en lille application som lytter på en bruger specificeret
port og sender data videre til en anden app via DCom. Et andet sted på LANet
senden en app Strings til ovennævnte application. Mit problem er at Stringen
ikke altid kommer hel igennem - Der bliver sendt eller modtaget ca. 1500
bytes. Jeg kan ikke afgøre om det er den sendende socket eller den
modtagende socket der ikke kan lide mine lange strings.
Er der en måde at sikre at en string kommer helt igennem? (Jeg har brug for
at kunne sende op til ca. 3000 bytes.)
Med venlig hilsen
Niels Borg
| |
Tomas Christiansen (15-01-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 15-01-03 01:06 |
|
Niels Borg skrev:
> Jeg har skrevet en lille application som lytter på en bruger
specificeret
> port og sender data videre til en anden app via DCom.
Bruger du Winsock kontrollen til at "lytte" med?
Så bruger du garanteret UDP-protokollen, og der kan du ikke sende
flere bytes (i én pakke) end dit netværks MTU, som formentlig er lidt
over 1500 bytes.
Skal du have alt sikkert igennem, så brug TCP-protokollen.
-------
Tomas
| |
Niels Borg (15-01-2003)
| Kommentar Fra : Niels Borg |
Dato : 15-01-03 22:38 |
|
Hej igen,
Tak for svaret - Jeg bruger TCP-protokollen.
Er der et trick som gør at jeg får sendt og modtaget en hel tekst streng?
Lige nu lave jeg blot en
sock.sendData strText
sock.GetData strRec, vbString
Med venlig hilsen
Niels Borg
"Tomas Christiansen" <toc-nospam-01@blikroer.dk> wrote in message
news:b028kf$25lq$1@news.cybercity.dk...
> Niels Borg skrev:
> > Jeg har skrevet en lille application som lytter på en bruger
> specificeret
> > port og sender data videre til en anden app via DCom.
>
> Bruger du Winsock kontrollen til at "lytte" med?
>
> Så bruger du garanteret UDP-protokollen, og der kan du ikke sende
> flere bytes (i én pakke) end dit netværks MTU, som formentlig er lidt
> over 1500 bytes.
>
> Skal du have alt sikkert igennem, så brug TCP-protokollen.
>
> -------
> Tomas
>
| |
Tomas Christiansen (15-01-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 15-01-03 23:40 |
|
Niels Borg skrev:
> Er der et trick som gør at jeg får sendt og modtaget en hel tekst
streng?
> sock.sendData strText
> sock.GetData strRec, vbString
Ja, du bliver nødt til at mellemlagre dine data "et andet sted" eller
du kan måske lade dem ligge i bufferen indtil du har modtaget _alle_
dine data (man kan ved hver dataarrival se på bytestotal eller
egenskaben .bytesreceived).
Jeg kan ikke umiddelbart selv genskabe problemet. Opstår det også hvis
både klient- og server-program kører på den samme computer (og de
"taler" sammen ved at forbinde sig til IP-adressen 127.0.0.1)?
-------
Tomas
| |
Carsten Suurland (20-01-2003)
| Kommentar Fra : Carsten Suurland |
Dato : 20-01-03 12:05 |
| | |
Tomas Christiansen (21-01-2003)
| Kommentar Fra : Tomas Christiansen |
Dato : 21-01-03 10:39 |
|
Carsten Suurland skrev:
> Du kunne evt. komprimere din tekststreng inden du sender den.
> Her kan du bruge Huffman algoritmen, som du kan finde her:
Spørgsmålet er blot om det er "godt nok" at basere sig på at ens data-mængde "måske" er lille nok eller "måske" er komprimerbar nok
til at kunne være i en netværkspakke som "måske" er lidt over 1500 bytes og som "måske" ikke (af andre årsager) bliver delt op af
afsender-Winsock-kontrollen og måske ikke (af andre årsager) bliver delt op af modtager-Winsock-kontrollen.
Der er desværre mange ubekendte i dette regnskab, og det skal holdes op imod de "måske'er" man kan eliminere ved én gang for alle at
programmere en komponent, som kan opsamle og holde data indtil en vis konsistens er opnået (det kan man vist kalde en "intelligent
buffer").
-------
Tomas
| |
|
|