[ Nevena79 @ 16.07.2009. 10:35 ] @
Imam problem sa jednim kodom ali nikako da ustanovim zasto. Identican kod na razlicitim racunarima ponasa se razlicito.
Na zahtev posalje se rang lista igraca ali neki igraci dobiju celu rang listu a neki samo deo, obicno 37 ljudi.
Lista se salje i prima putenm interneta, skenirala sam koju poruku klient prima i kada je rucno ubacim u kod kod sebe opet dobijem ispravan rezultat medjutim neki od klijenata dobijaju okrnjenu listu tj oni dobijaju celu ali im program prikaze okrnjenu. A to i nije bas sporadican slucaj nego je odnos ispravnih i neispravnih ok 50% korisnika.

Evo code:

Code:

p1="Rang lista| 772|slava| 149| 79| 70|milanovcanin| 95| 56| 39|Dejan_85| 96| 61| 35|ana m| 67| 32| 35|barkon| 73| 43| 30|butterfly| 64| 34| 30|p.sonja| 61| 35| 26|TILE VGD| 69| 46| 23|milka| 60| 37| 23|natebinov| 44| 23| 21|mirovgd| 32| 12| 20|maja87| 42| 25| 17|draggaj| 98| 82| 16|nemanja| 69| 55| 14|Jeja| 32| 18| 14|GALCA| 24| 10| 14|vojkan| 80| 67| 13|zoran| 23| 10| 13|zile| 16| 7| 9|gudi14| 34| 26| 8|petar prvi| 24| 16| 8|maki| 53| 46| 7|Nesa| 42| 35| 7|milena| 18| 11| 7|martin| 17| 10| 7|bato| 7| 0| 7|david| 27| 21| 6|jandjole| 19| 13| 6|Anonymous| 9| 3| 6|divac01| 41| 36| 5|slavka| 86| 82| 4|proka| 49| 45| 4|belfort| 18| 14| 4|psychonip| 17| 13| 4|sinisaj| 16| 12| 4|vedran27| 9| 5| 4|milco| 8| 4| 4|danijeelap.90@gma"
p2="il.com| 9| 6| 3|Mortisha| 8| 5| 3|ljubus| 5| 2| 3|aleksbg84| 3| 0| 3|maja.makco| 14| 12| 2|valtor| 14| 12| 2|kasper12345| 11| 9| 2|Joca GSP| 2| 0| 2|vladacama| 2| 0| 2|jeskaodjubavi| 60| 59| 1|raf| 14| 13| 1|Mare| 7| 6| 1|ZOFF| 6| 5| 1|milos| 3| 2| 1|djole haubica| 2| 1| 1|Neximo| 2| 1| 1|anab| 2| 1| 1|jokica| 1| 0| 1|pajaptt| 1| 0| 1|fico13| 1| 0| 1|Nevena| 1| 0| 1|sayles| 1| 0| 1|saka90| 1| 0| 1|dapanipijepel| 1| 0| 1|hulk| 1| 0| 1|snezana60| 27| 27| 0|dragana2244| 22| 22| 0|sale| 7| 7| 0|*elnino*| 6| 6| 0|salenovakov| 6| 6| 0|aca87| 6| 6| 0|jangaga| 5| 5| 0|vladapfc| 5| 5| 0|Space| 2| 2| 0|todorko| 2| 2| 0|Minche| 1| 1| 0|shinik| 1| 1| 0|JovicAna| 1| 1| 0|anka| 1| 1| 0|doggy| 1| 1| 0|dusancavic| 1| 1| 0|Mima| 1| 1| "
p3="0|mmmm| 44| 45|-1|idriz| 18| 19|-1|Anita| 6| 7|-1|jaca| 6| 7|-1|dusica| 4| 5|-1|Deki| 4| 5|-1|sandrica| 4| 5|-1|Ackobradonja| 2| 3|-1|davorbinov| 1| 2|-1|ljubicica| 0| 1|-1|SLAVISA| 0| 1|-1|zlidjura| 0| 1|-1|elvir81| 0| 1|-1|ckcaki| 0| 1|-1|Paok| 0| 1|-1|damir| 0| 1|-1|TILE| 0| 1|-1|bojan93| 0| 1|-1|dragi| 0| 1|-1|nesha| 0| 1|-1|ddddula| 0| 1|-1|Poncho| 0| 1|-1|zivkicaj| 0| 1|-1|genijalac| 0| 1|-1|vodkaviski| 0| 1|-1|milan67| 0| 1|-1|Mladen| 0| 1|-1|Markos_Kg| 0| 1|-1|pravnik4| 0| 1|-1|marina| 0| 1|-1|jeca*pereca| 0| 1|-1|dacapo| 0| 1|-1|sarke011| 0| 1|-1|zivcevic| 0| 1|-1|mikica| 0| 1|-1|Aca 357| 0| 1|-1|Goka| 0| 1|-1|dianans| 0| 1|-1|srki| 0| 1|-1|lepeza| 31| 33|-2|Mona| 10| 12|-2|mara| 8| 10|-2|Duda| 3| 5|-2|jexnex|"
p4=" 2| 4|-2| jaca| 2| 4|-2|mira| 2| 4|-2|uragan013| 0| 2|-2|Alfa Romeo 155 TW Sport| 0| 2|-2|[email protected]| 0| 2|-2|ICI| 0| 2|-2|cobi| 0| 2|-2|vesnak4v| 0| 2|-2|Filipinaci| 0| 2|-2|petar0386| 0| 2|-2|kemur14| 0| 2|-2|milancicicu te | 0| 2|-2|djokavajfert| 0| 2|-2|lepi toza| 0| 2|-2|miljan| 9| 12|-3|Dulecom| 6| 9|-3|Cata| 5| 8|-3|Dane| 4| 7|-3|meggy90| 4| 7|-3|goran.seki| 2| 5|-3|vinsdelmonte| 2| 5|-3|vlajdzo93| 0| 3|-3|stoja| 0| 3|-3|Tica| 0| 3|-3|malisam| 0| 3|-3|Ljiljana| 0| 3|-3|nasta| 0| 3|-3|alisasamarsa| 37| 41|-4|Dino| 22| 26|-4|jjurisic| 4| 8|-4|Tosre| 1| 5|-4|Alim123| 0| 4|-4|veca| 0| 4|-4|kostabinov| 0| 4|-4|zokyyugo| 28| 33|-5|mirkec| 15| 20|-5|mariodopudja| 12| 17|-5|Sanja| 10| 15|-5|tricka_ubica| 1| 6|-"
p5="5|miki87| 0| 5|-5|Vasilij| 0| 5|-5|tihi| 19| 25|-6|kasolino| 13| 19|-6|maèak.| 2| 8|-6|Robilad| 2| 8|-6|marso| 0| 6|-6|dusanka| 28| 35|-7|zekan| 10| 17|-7|Marko_PG| 3| 10|-7|katarinica| 3| 10|-7|davorinjo| 3| 11|-8|gaga| 38| 47|-9|zoran_a| 20| 29|-9|dukid| 14| 23|-9|taja| 11| 20|-9|ljuba| 6| 15|-9|jelica| 17| 27|-10|jeca| 10| 20|-10|kaja86| 5| 15|-10|anci| 12| 24|-12|Beca| 27| 40|-13|sai baba| 21| 37|-16|[email protected]| 11| 27|-16|tamarix| 9| 26|-17|bubitsa| 3| 24|-21|caki| 27| 51|-24|tanja| 40| 68|-28|radica| 61| 92|-31|nensy| 32| 67|-35|heart to heart| 19| 65|-46"

Poruka = p1 + p2 + p3 + p4 + p5


desifruj = Split(Poruka, "|")

If desifruj(0) = "Rang lista" Then
'primila sam sortiranu rang listu od servera i sada je  treba prikazati
'format Rang lista|broj koliko ima igraca|svi igraci sortirani|i redom pobede i porazi i prosek za svakog igraca redom|Kraj poruke

frmRangLista.Show
brIgraca = Val(desifruj(1))
br = 1
For i = 1 To brIgraca Step 4
    frmRangLista.MSFlexGrid1.AddItem Str(br) + vbTab + desifruj(i + 1) + vbTab + desifruj(i + 2) + vbTab + desifruj(i + 3) + vbTab + Str(Round(Val(desifruj(i + 4)), 2)) 'dodajem igrace u spisak
    br = br + 1
Next i



[Ovu poruku je menjao Nevena79 dana 16.07.2009. u 13:11 GMT+1]
[ Nevena79 @ 16.07.2009. 10:40 ] @
Ko hoce da pomogne najbolje bi bilo da ubaci code u VB ili u notepad jer je ovde poprilicno nabijeno i zbunjujuce nepregledno. Prvi deo je poruka koju prime klienti a posto je dugacka ovde sam je za primer rastavila na 5 poruka p1,p2,p3,p4,p5 i na kraju ih spajam u jednu koja se zove poruka. To tako u originalu nije vec tamo primaju direktno poruku ali i kada sam ovako ubacila u code opet sam na osnovu njihovih rezultata dobila ispravnu listu a taj koji je koristio tu ulaznu poruku dobio je samo ranglistu za prvih 37 ljudi.

desifruj cita koja je komanda dosla, u ovom slucaju komanda je Rang lista i tada izvrsava ovaj mali deo programa gde
popunjava flexgrid sa tim podacima ali nekome popuni sve podatke a nekome skrati.

Code:

If desifruj(0) = "Rang lista" Then
'primila sam sortiranu rang listu od servera i sada je  treba prikazati
'format Rang lista|broj koliko ima igraca|svi igraci sortirani|i redom pobede i porazi i prosek za svakog igraca redom|Kraj poruke

frmRangLista.Show
brIgraca = Val(desifruj(1))
br = 1
For i = 1 To brIgraca Step 4
    frmRangLista.MSFlexGrid1.AddItem Str(br) + vbTab + desifruj(i + 1) + vbTab + desifruj(i + 2) + vbTab + desifruj(i + 3) + vbTab + Str(Round(Val(desifruj(i + 4)), 2)) 'dodajem igrace u spisak
    br = br + 1
Next i


Zaista code ne moze biti kraci a problem gluplji....

[Ovu poruku je menjao Nevena79 dana 16.07.2009. u 13:10 GMT+1]
[ Shadowed @ 16.07.2009. 11:55 ] @
Hm, koji se deo gubi? Uvek isti ili ne? Kod razlicitih klijenata se gubi razlicit deo ili isti?


Jedna sugestija koja nema veze sa konretnim problemom.
Code:
br = 1
For i = 1 To brIgraca Step 4
    frmRangLista.MSFlexGrid1.AddItem Str(br) ...
    br = br + 1
Next i

Dovoljno je
Code:

For i = 1 To brIgraca Step 4
    frmRangLista.MSFlexGrid1.AddItem Str((i-1)/4+1) ...
Next i


:)

Takodje, za spajanje stringova bolje koristi & jer ako imas cifre u stringu moze napraviti problem.
[ Nevena79 @ 16.07.2009. 12:07 ] @
Ok sugestija prihvacena. Evo ovako, jutros mi je jedan video oko 37 ljudi, zaboravih tacan broj a sada sam ih pitala i jedan kaze 193 koliko i ima, drugih 5 kaze 75 i jedan kaze 74. Znaci to varira po ne znam kom osnovu.
Inace oni dobijaju tu celu poruku kao komplet preko winsocka, dala sam jednom korisniku program koji hvata to sto on prima i ta poruka je ova koju sam razbila na p1,p2,p3,p4,p5 cisto zbog mesta jer drugacije ne mogu da je napisem kao celinu. Kada je kao takvu spojim i prosledim sebi kao u primeru gore meni prikaze celu rang listu a njemu samo 37 ljudi.
[ captPicard @ 16.07.2009. 12:27 ] @
Pošto nemam ideje, malo ču bubati :-)

1. Malo je vjerojatno, ali probaj prije nego kreneš u obradu izbaciti sva prazna mjesta u file-u.
2. Obavezno spajaj stringove onako kako ti je shadowed preoporučio, i tu bi mogao ležati problem.
3. Obrati pozornost na završetak p1 i početak p2. Na kraju p1 nema delimitera | a nema ga niti na početku p2. Da li je to namjerno tako, ili? Tu bi isto mogao ležati problem, makar je čudno da jedanput prođe a drugi puta ne...

Dodatak:
Ok, izbaci broj 3, vidim da je to samo nastavak :-)
[ djoka_l @ 16.07.2009. 12:30 ] @
@Nevena79 : po mom iskustvu, kada nešto radi na različitim računarima različito, najčešće je kriv regional setings.
Druga observacija: 38. slog je prvi koji sadrži "@" u nazivu. To mi je najsumnjiviji razlog za prekid ispisa na 37. mestu.
[ Nevena79 @ 16.07.2009. 12:44 ] @
Taj 38 slog sa @ nije nista drugo do ime igraca koji je umesto niska stavio svoju e mail adresu :)

Evo da jos pojasnim format te poruke.

Format je:
Rang lista|Broj podataka u poruci|Igrac|Njegove pobede|Njegovi porazi|Razlika pobeda i poraza|.......|Kraj poruke

A sto se tice spajanja poruka sa + tu ne bi trebalo da bude problem jer kada bih spajala string i broj na taj nacin to nece da moze :) Znaci pri slanju prilikom spajanja svega kod brojeva je korisceno str(broj)

[ captPicard @ 16.07.2009. 12:58 ] @
Kako ti je deklarirana varijabla poruka?

Probaj umjesto u flexgrid ubacivati u jedan običan text file ili stringlist ili listbox. Čisto da vidiš šta se dešava, možda budemo bliže rješenju problema... Ili dodaj u array, pa ga pročitaj, da vidiš šta ispadne.
[ Shadowed @ 16.07.2009. 12:58 ] @
Nije direktno odgovor na tvoje pitanje, al' sto lepo ne koristis xml? :)
I citljivije je i lakse za otkrivanje gresaka.
Jedino nisam siguran da li ima nekih klasa u sestici koje lepo kreiraju/citaju xml ili jos bolje za serijalizaciju kao u .net-u.

Ovo za + i & je bilo uopsteno, nevezano za ovaj kod.
[ Nevena79 @ 16.07.2009. 13:12 ] @
Poruka je string i dobije korisnik nju to je 100% i tu poruku takvu kakvu on dobije kada ubacim u svoj code kao tu na primeru dobijem uredno popunjenu listu a on ne, znaci na identican ulazni podatak. To mene muci sto je identican i ja kod sebe nikako ne mogu da prouzrokujem tu gresku pa da vidim gde je problem i da ga ispravim.

E sad, pada mi na pamet jedna stvar a to je onaj broj 37. To je kako vidim sadrzaj poruke p1 pa mi padaju na pamet neke mogucnosti ali se u to ne razumem dovoljno do detalja da bih znala da li je to problem. Naime mozda neko od njih dobije poruku ali je sistem zbog duzine rastavi bas na tih 5 malih poruka i mozda ih ne gleda kao celinu. Prvo sam pomisljala na RAM ali covek koji dobija tek 37 ljudi iz liste ima 2GB RAM-a tako da nema govora o tome.
Mozda bih bilo resenje da razbijem tu poruku i da je ne saljem celu od jednom jer zapravo ne znam kako to Win odradjuje jer zaista je dugacka. Mozda da je razbijem na krace nezavisne poruke i da ih na prijemu skupljam i formiram jednu koja mi treba ili da jednu po jednu stavku ubacujem u promenjive i tu ih cuvam dok ne kompletiram listu pa ih onda prosledim graficki. Ali ni tako ne znam moze li biti problema, sta ako je rang lista npr od 1000 ljudi u kojij promenjivoj da je cuvam tj kojoj vrsti promenjive?
I kada dobijem tu listu od 1000 ljudi ne znam da li ce ispasti iz nekog njegovog opsega jer defintivno nije do winsock-a na koji sam sumnjala jer on primi ispravnu poruku ali dalje u obradi nesto pukne.


@Shadowed to je vec ogromni code i nije zgodno za menjanje a i pravo da ti kazem ne bih se sad petljala sa jos necim sa cim nemam iskustva :)

P.S. Sad mi je palo na pamet kako cu iskljuciti mogucnost da Win tu nesto petlja i rastavlja. Poslacu klijentu program onakav kakav i ja koristim i ubacicu mu programski tu ulaznu poruku kao kada je ja testiram. Znaci nece je dobiti putem interneta nego iz code i ako mu se ne osvezi lista kako treba znaci da nije do prenosa nego zaista nemam ideju sta bi bilo.
[ captPicard @ 16.07.2009. 13:26 ] @
Možeš ovdje zakačiti taj exe i primjer dokumenta?
[ Nevena79 @ 16.07.2009. 13:32 ] @
Hajde izvrdacu nesto, samo moram izvaditi taj deo iz programa.


EDIT:

Evo uploadovala sam primer i bas me zanima koliko cete vi videti ljudi u listi?

[Ovu poruku je menjao Nevena79 dana 16.07.2009. u 14:47 GMT+1]
[ Nevena79 @ 16.07.2009. 14:08 ] @
E ovako, testirala sam sa jednim drugim covekom (ne onim sa kojim sam pocela) i ovaj takodje ne vidi celu listu ali kada je pokrenuo ovaj code sto sam zakacila dobio je punu listu. Onda se ipak izgleda desava da tu veliku poruku Win ili Winsock razbije na vise malih ali ih posle ne poveze, ne znam zasto. Jel to moguce?
Jer kada sam u kodu unela tu poruku onda je dobio listu kako treba, znaci nesto je oko prijema ali mi nije jasno zasto se razlikuje medju racunarima

Na prijemu sam snimila poruku na sledeci nacin:
(mislim da je to sad bino ako smo onu prvu gresku eliminisali)

winsock primi neku poruku i liniju ispod pisem

open"Poruka.dat"for append as #1
write #1,poruka
close #1

Kada se na ovaj nacin nesto snimi u datoteku zapis ima sledeci oblik
"neki niz karaktera"
"drugi niz karaktera"

Znaci svaka poruka je odvojena navodnicima i ove 2 poruke gore su ODVOJENE i NEZAVISNE.

Ali kako izgleda fajl koji mi je on poslao?
Izgleda ovako
"Ranglista|...podaci...|"
"...podaci..."
"...podaci..."|kraj poruke"

Koja je razlika?
Pa razlika je u tome sto je on ovu celu poruku podelio navodnicima kao sto se vidi a to je sve trebala biti jedna poruka od ranglista pa do Kraj poruke.
Jasno mi je da to nije sve moglo da stane u jedan red ali ne znam zasto je svake naredne podatke takodje stavio u navodnike kao da to sve nije jedna povezana celina nego 3 razlicite. To nastaje ili zbog nacina upisa u datoteku ili mozda nekako cudno primi taj podatak na prijemu pa ga zato na ovaj nacin upise u log datoteku.
Nadam se da ste rasumeli sta sam htela da kazem :)
[ captPicard @ 16.07.2009. 14:13 ] @
Kada dođem doma ću pogledati pa javim ako šta otkrijem.

Citat:
Nevena79
Ali kako izgleda fajl koji mi je on poslao?
Izgleda ovako
"Ranglista|...podaci...|"
"...podaci..."
"...podaci..."|kraj poruke"


Zato sam ti i rekao da zapišeš točno ono šta dobije računalo preko winsocka u npr tekstualnu datoteku, pa da onda vidimo šta se dešava.
[ Nevena79 @ 16.07.2009. 15:12 ] @
Pa ono sto sam napisala u prvim postovima pod p1,p2,p3,p4,5p je tacno to sto se dobije u datoteci. Samo sam dodala
p1=
p2=
p3=
...
Sve ostalo je copy paste iz datoteke sa sve njegovim navodnicima, znaci nista dodavano.
[ captPicard @ 16.07.2009. 16:18 ] @
A da probaš kod slanja ograničiti paket na 100 znakova, pa da onda u programu sve spojiš?

Pročitaj ovo:

http://www.vbforums.com/showthread.php?t=339377
[ Aleksandar Vasic @ 16.07.2009. 16:39 ] @
Probaj umesto GetData da koristis PeekData :)

Al' nemoj da zaboravis Winsock.Close
[ Nevena79 @ 16.07.2009. 17:52 ] @
Peek Data... hm nisam nikad cula za to :)
Ima li nesto kod te komande na cega bih trebala obratiti paznju i koja je razlika medju njima?
.PeekData data, [type,] [maxLen]

da li je dovoljno samo PeekData poruka ili trebam i type i maxLen da ubacim?
[ Aleksandar Vasic @ 16.07.2009. 18:12 ] @
Nisam ni ja, do pre nekih mesecak dana kada sam imao problema da primim podatke sa nekog server :)

Samo Winsock.PeekData stringVarijabla
[ Shadowed @ 16.07.2009. 19:35 ] @
Zapravo, najbolji nacin ti je da ti paket podataka ima header i body gde ces u header-u imati podatak o velicini paketa. Onda napravis sistem koji ce na osnovu header-a spajati paket od dolazecih podataka i obavestavati kada kompletan paket stigne.
[ Nevena79 @ 16.07.2009. 19:48 ] @
Ej ovaj Peek radi cudo :) Neznam kako mu je uspelo ali uspelo je :) Hvala!

@shadowed to je dobra ideja ali na ovaj nacin rade sve kontrole a ima ih sigurno preko 30 jedino je tu zapelo. Inace koristite Peek :)
[ Shadowed @ 16.07.2009. 19:54 ] @
Nema veze, znas za drugi put ;)