Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

winsock i spajanje paketa

[es] :: Visual Basic 6 :: winsock i spajanje paketa

[ Pregleda: 1784 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-3.sezampro.yu.



+322 Profil

icon winsock i spajanje paketa26.09.2010. u 19:16 - pre 165 meseci
Trebao bi mi neko iskusan, s obzirom da nisam siguran da cu ovako na papiru ni znati pojasniti problem. Naime, znamo da winsock salje asinhrono pakete podataka tako da su oni na prijemu grupisani i cesto su spojene poruke. Ali, ne znam do cega je to, na nekim racunarima ta poruka se gleda kao jedna celina, koliko god da je dugacka, a neki drugi pak racunari je gledaju kao celinu do odredjene duzine i onda prave novu poruku i prave proizvoljni prekid.

Napravio sam na prijemu da u datoteku zapisujem blok podataka koji dolazi sa servera.
Svaki blok podataka stavljen je pod navodnike. Primeticete da se blok podataka u datoteci ISPRAVNO, nalazi u jednoj celini tj. pod jednim navodnicima (otvorenim i zatvorenim), dok se isti taj blok podataka u datoteci NEISPRAVNO nalazi iscepkan u par zasebnih poruka.

Zbog cega dolazi do toga? DA li je to vezano za podesavanja Windowsa ili je hardwerske prirode?
Napominjem da se uzorak ne menja slucajno vec uvek isti racunari primaju tacan i uvek isti racunari netacan (iseckan) blok podataka.

Ako fajlove pregleate ovako sa es-a bice nepregledni. Predlazem da ih kopirate u notepad i onda ce se mnogo lepse videti u svega 2-3 reda.

Pojednostavljeno receno jedan racunar ce primiti sledecu poruku:

Code:

"Poruka1|Text poruke|Kraj porukePoruka2|Text poruke|Kraj poruke.....
Poruka 100|Text poruke|Kraj poruke"


A racunar na kome ne radi kako treba dobice nesto ovako:

Code:

"Poruka1|Text poruke|Kraj porukePoruka2|Text poruke|Kraj poruke"
"Poruka 100|Text poruke|Kraj poruke"


Posto su obe poruke pod navodnicima to ce biti kao 2 odvojena paketa podataka.
Svaka poruka je odvojena stringom |Kraj poruke a u okviru svake poruke podaci su odvojeni znakom "|".
I sada ako dodje do prekida na nezgodnom mestu ja cu dobiti poruku bez zaglavlja sa kojom program ne zna sta da uradi, ili cu dobiti poruku sa zaglavljem ali bez nekog dela koji odredjuje zaglavlje pa ce to biti nepotpun podatak.


[Ovu poruku je menjao Blue82 dana 26.09.2010. u 21:02 GMT+1]
Prikačeni fajlovi
 
Odgovor na temu

vuchko.vuchko

Član broj: 217112
Poruke: 301
*.teol.net.



+2 Profil

icon Re: winsock i spajanje paketa27.09.2010. u 17:39 - pre 165 meseci
Ajd' malo objasni nacin slanja? Da li ti saljes ovaj ceo text kao jedan string ili ga saljes iz vise dijelova ili kako vec...

Kakav je CPU od ovog racunara sto je napravio ovu gresku "Neispravno.txt"?
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-3.sezampro.yu.



+322 Profil

icon Re: winsock i spajanje paketa28.09.2010. u 05:24 - pre 165 meseci
U sustini problem sam resio jedino mi nije jasno zasto nastaje. CPU na masini koja prima neispravan tekst je jaci od mog na kome radi normalno a sto se tice slanja, salje se vise kratkih poruka ali ih Winsock spaja u jednu posto je asinhroni tip slanja upitanju. U sustini poruka se uvek ista posalje, jedino se prijem na kraju razlikuje na prijemu na razlicitim racunarima sto mi nema bas neke logike.
 
Odgovor na temu

galahad
Slobodan Todorov
Radio-televizija Vojvodine,
Jack-Of-All-IT-Trades, Web redakcija
Novi Sad

Član broj: 20613
Poruke: 146
*.dynamic.isp.telekom.rs.

Jabber: galahad@elitesecurity.org
ICQ: 52020296
Sajt: www.todorowww.net


+4 Profil

icon Re: winsock i spajanje paketa28.09.2010. u 10:22 - pre 165 meseci
Davno sam se igrao sa VB6 i Winsock, ali koliko me sećanje služi, mislim da to ima veze sa MTU, tj. maximum transmission unit, i mislim da zavisi od više faktora, MTU podešen na prijemnom OS, MTU na serverima koji se nalaze između računara koji šalje i koji prima, i slično.

Svojevremeno sam napravio neki IRC klijent, i imao sličan problem, nekad su poruke od servera stizale cele, a nekad iz delova. Fora je u tome da je recimo IRC protokol zamišljen kao takav, da neće uvek cela poruka stići, pa postoje tačno određene sekvence bajtova koje određuju početak, a koje kraj poruke. Kad god imaš neku komunikaciju, moraš da napraviš malo složeniji protokol, recimo da imaš neku malo verovatnu kombinaciju bajtova koja će označavati početak poruke, neku za kraj poruke, i recimo neki checksum pre kraja, da bi mogao da proveriš da li je cela poruka stigla.

A u winsock jednostavno primaš šta stigne, lepiš u jednu promenljivu koja je na nivou forme, klase, ili gde već želiš, a nakon toga obrađuješ sadržaj promenljive. Pa ukoliko imaš celu poruku, obradiš je, a ostatak zadržiš u toj promenljivoj, i nastaviš da lepiš podatke, dok ne dobiješ opet kompletnu poruku.

Primera radi:
Code:

STRTNeka PorukaCHKEND

STRT = Neka sekvenca bajtova, koja označava početak poruke
Neka Poruka = Očigledno šta je :)
CHK = Checksum poruke koje šalješ, BEZ markera za početak i kraj, znači CHK(Neka Poruka)
END = Neka sekvenca bajtova, koja označava kraj poruke

E sad, ovo je super ako dobijaš poruke "ucelo", a ako dobijaš iz delova, može se desiti da dobiješ i malo drugačije podatke, tipa:

Code:

Paket 1: STRTNeka PorukaCHKENDSTRTNeka druga
Paket 2:  porukaCHKENDSTRTNeka treca
itd...

Definišeš dakle neku promenljivu, recimo strPackets, na koju ćeš samo da lepiš šta stigne na winsock, i puštaš u neku proceduru koja će da obrađuje primljene poruke

U slučaju da imaš više paketa, ta procedura treba da izvuče prvu kompletnu poruku koju može. Sadržaj strPackets je
Code:

Poziv posle prijema prvog paketa:
strPackets = "STRTNeka PorukaCHKENDSTRTNeka druga"

Procedura "iseca" poruku STRTNeka PorukaCHKEND

Poziv posle prijema drugog paketa, novi paket je zalepljen na ostatak starog
strPackets = "STRTNeka druga porukaCHKENDSTRTNeka treca"

Opet, procedura "iseca" STRTNeka druga porukaCHKEND, a ostaje STRTNeka treca

I tako u krug.

Valjda je to to što te je mučilo, i valjda sam bio jasan (umem da budem JAKO konfuzan nekad :D)
- SKRati link - JaZaKraljevo.rs -

"I have never let my schooling interfere with my education." - Mark Twain
 
Odgovor na temu

Blue82
dipl. ecc.

Član broj: 165981
Poruke: 838
*.adsl-a-6.sezampro.rs.



+322 Profil

icon Re: winsock i spajanje paketa29.09.2010. u 05:20 - pre 165 meseci
Da, to sam vremenom skapirao pa sam lepio poruke i od tada je uredu, jedino me je bunilo zasto uvej isti racunari dobijaju celu poruku a uvek isti u prekidima, cisto teoretski. Hvala na odgovoru!
 
Odgovor na temu

[es] :: Visual Basic 6 :: winsock i spajanje paketa

[ Pregleda: 1784 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.