[ erkan @ 23.09.2004. 08:21 ] @
Pozdrav svima,
ako preko TCP/IP a primam poruke u odredjenom formatu
a poruke su varjabilne duzine, da li se mogu javiti roblemi ako f-jom:
recv(pCli->m_hSocket, acBuffer, TCP_MESSAGE_LEN, 0)
primam poruke u duzini TCP_MESSAGE_LEN pri cemu taj
parametar oznacava najvecu mogucu duzinu poruke koja mi stize
po tom portu? Dakle, da li mogu ovim nacinom zahvatiti i dio naredne poruke pa time izazvati gresku ili prema ovom protokolu svaka poslana poruka je u zasebnom buffer-u?
Da li se nakon citanja poruke iz buffera (ili samo jednog njenog dijela) ta poruka automatski brise iz njega?

Hvala!
[ tweeester @ 23.09.2004. 08:53 ] @
Nazalost situacija je prostija nego sto mislis, kazem nazalost zato sto to otezava programiranje. Naime, iako TCP podaci putuju u "paketima" sa klijentske (i serverske) strane TCP podaci se posmatraju kao kontinualni niz bajtova, dakle nema paketa/poruka. Hocu da kazem da je mopguce sledece:

1. klijent salje 10 puta po 10 bajtova - server prima svih 100 bajtova odjednom
2. klijent salje 10 puta po 10 bajtova - server prima 100 puta po 1 bajt
3. sve kombinacije izmedju 1. i 2. su moguce

Dakle to sto klijent posalje 20 bajtova u jednom send() pozivu ne znaci da ce server svih 20 da primi u jednom recv() pozivu, mozda primi manje, a mozda i vise (ako je posle posalto jos nesto)...

Dakle ... knjigu u ruke ... salim se.

I da, kada se bajtovi jednom procitaju sa recv() onda se brisu iz bafera (samo oni koji su procitani).

Hope this helps.
Pozdrav
[ erkan @ 23.09.2004. 09:59 ] @
OK, hvala!
Koliko sam shvatio, to znaci da nikada nisam siguran da cu jednim
recv(...) primiti jednu cjelovitu poruku (mada je dosada uvijek uspjevalo).

[ markom @ 23.09.2004. 10:36 ] @
Šta tačno podrazumevaš pod "porukom"? Takođe, laboratorijske uslove ne treba mešati sa pravim Internetom... Za početak, u TCP komunikaciji postoji jedan parametar koji se zove MSS, tj. Maximim Segment Size. Probaj da izmeniš taj parametar u tvojoj laboratoriji pa da testiraš...

Marko.
[ erkan @ 24.09.2004. 13:49 ] @
Pod porukom podrazumjevam niz bajta (od 20 do 300)
koji salje od servera prema klijentu ili obratno, pri cemu ta poruka sadrzi odredjene podatke koji odredjuju sljedecu akciju koja se treba izvrsiti na serveru ili klijentu.
A, pravo da ti kazem, ne znam sta je taj >> Maximim Segment Size <<
i kako da ga izmjenim?

Mada u medjuvremenu sam nasao rjesenje mog problema sa porukama varijabilne duzine.
Poruke koje primam uzimam iz buffera u fiksnoj duzini smjestam u svoj interni buffer par puta veci od primljene poruke, a onda uzimanjem parametra i siftanjem ulijevo uspjevam da obezbjedim da se poruke predaju na obradu u svojoj originalnoj velicini (koja je varijabilna).
[ markom @ 24.09.2004. 20:26 ] @
RFC 793, strana 18.

Marko.