Forumi
Home Pravila i pomoć Članovi Kalendar Današnji postovi


Povratak   PC Ekspert Forum > Računala > Software > Web dizajn, programiranje i ostalo
Ime
Lozinka

Odgovori
 
Uređivanje
Staro 10.10.2009., 10:22   #1
malixx
Premium
 
Datum registracije: Feb 2009
Lokacija: Zagreb
Postovi: 74
VB6 MREŽNO IGRANJE-WINSOCK

Pozdrav svima! evo pokušavam raditi igricu u mreži, znam napravit jedan prijenos podataka, ali što ako želim poslati više podataka a ne jedan? -
Zakaj ne mogu napisat npr. dva il više puta ovako u jednoj formi:
U serveru je:
Code:
Winsock1.SendData trn
Winsock1.SendData dd
Winsock1.SendData iii
A ovo je client:
Code:
Dim dat As String   
Winsock1.GetData dat, vbString   
Nešto= dat 
JošNeštoDrugo= dat.....  ..itd...
I na kraju dobijem mješanac ovog Nešto i JošNeštoDrugo ... kako to riješit?
kad to stavim onda mi se sve mješa jedno s drugim.

Recimo jedno bi stavio na klik butona, drugo bi stavio na button change.. i tak..
Aj please ak mi netko može odgovorit,
HITNO MI JE !
malixx je offline   Reply With Quote
Staro 16.10.2009., 17:51   #2
malixx
Premium
 
Datum registracije: Feb 2009
Lokacija: Zagreb
Postovi: 74
kaj se niko sad u ovo ne kuži???
malixx je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Staro 22.10.2009., 15:21   #3
Dungeon Keeper
Registered User
 
Datum registracije: May 2008
Lokacija: Rijeka
Postovi: 39
Winsock1.SendData "Prvi"
Winsock1.SendData "Drugi"
Winsock1.SendData "Treci"

Može rezultirati da ti podaci na drugu stranu dođu redom kako si ih slao, a mogu ti doći i stringovi tipa

"PrviDrugi" pa "Treci"

Fora je u tome šta ćeš sam morati osmisliti algoritam koji će to rješiti,a ja ti predlažem da koristiš neke separatore na početku i kraju stringova koje šalješ.

Npr:

<msg>Prvi</msg>
<msg>Drugi</msg>
<msg>Treci</msg>

Pa da podaci i dođu zajedno izgledalo bi

"<msg>Prvi</msg><msg>Drugi</msg><msg>Treci</msg>"

za što ti imaš svoj algoritam koji će čitati te msg tagove (ja predlažem funkciju InStr) i izvaditi podatke iz tvog "okvira".

Nadam se da me kužiš. Ne postoji drugačije rješenje gdje će podaci stizati redom jer je winsock.ocx tako isprogramiran da sam raspoređuje te pakete koje šalje, neovisno kako ih ti šalješ.

Jedino da isprogramiraš nešto u C++u recimo
Dungeon Keeper je offline   Reply With Quote
Staro 23.10.2009., 17:48   #4
malixx
Premium
 
Datum registracije: Feb 2009
Lokacija: Zagreb
Postovi: 74
Hm al ti si to stavio sve u navodnike?
i šta je ovo <msg>? pa to ne može biti u visual basic 6???

Evo trebam ovako:

Private Sub L1_Click()
If player = "X" Then L1 = "X"
turn.Caption = "O"
If player = "O" Then L1 = "O"
turn.Caption = "X"
Winsock1.SendData L1 'šalje akciju na jedan klik u client
End Sub

Private Sub L2_Click()
If player = "X" Then L2 = "X"
turn.Caption = "O"
If player = "O" Then L2 = "O"
turn.Caption = "X"
Winsock1.SendData L2 'šalje akciju na jedan klik u client
End Sub

I kak sad da se u clientu u jednom labelu upiše L1, a u drugom labelu L2? (meni se upisuju oba u jednom, što ne valja).
?
malixx je offline   Reply With Quote
Staro 24.10.2009., 00:37   #5
Dungeon Keeper
Registered User
 
Datum registracije: May 2008
Lokacija: Rijeka
Postovi: 39
Pomoću Winsock-a možeš samo poslati niz znakova, string.

Na drugoj strani dolazi taj niz znakova. To je sve šta možeš.

Kada dođu podaci aktivira se Data_Arrival event.

Tada ti prihvatiš podatke, pregledaš šta je došlo i radiš određene akcije nad tim.

"<msg>" je dio stringa koji šalješ a označava početak poruke.
"</msg" je također dio stringa koji šalješ a označava kraj poruke.

Ja sam primjera radi napiaso taj </msg> a ti možeš koristii bilo koji niz znakova s kojim ćeš označiti početak i kraj poruke.

Staviš <x> i </x> recimo, bilo šta. To je sve običan string kojeg ćeš poslati, a na klijent strani ćeš imati funkciju koja če čitati podatke iz tog stringa.

Moraš osmisliti svoj način na koji ćeš slati podatke sa servera na klijenta.
Dungeon Keeper je offline   Reply With Quote
Staro 24.10.2009., 00:39   #6
Dungeon Keeper
Registered User
 
Datum registracije: May 2008
Lokacija: Rijeka
Postovi: 39
Citiraj:
Autor malixx Pregled postova
Hm al ti si to stavio sve u navodnike?
i šta je ovo <msg>? pa to ne može biti u visual basic 6???

Evo trebam ovako:

Private Sub L1_Click()
If player = "X" Then L1 = "X"
turn.Caption = "O"
If player = "O" Then L1 = "O"
turn.Caption = "X"
Winsock1.SendData L1 'šalje akciju na jedan klik u client
End Sub

Private Sub L2_Click()
If player = "X" Then L2 = "X"
turn.Caption = "O"
If player = "O" Then L2 = "O"
turn.Caption = "X"
Winsock1.SendData L2 'šalje akciju na jedan klik u client
End Sub

I kak sad da se u clientu u jednom labelu upiše L1, a u drugom labelu L2? (meni se upisuju oba u jednom, što ne valja).
?
Ne možeš poslati samo "X" ili "O".

Pošalješ recimo "<L2>X</L2>" kad ašalješ L2

Onda na Klijentu provjeriš dali primljeni string sadržava string "<L2>", i ako da to je onda taj L2, a vrijednost pročitaš iz stringa nakon <L2> i prije </L2>, a te "<L2>" i "</L2>" pronađeš pomoću InStr funkcije.

Prouči malo kako InStr funkcija radi.
Dungeon Keeper je offline   Reply With Quote
Staro 24.10.2009., 00:57   #7
Dungeon Keeper
Registered User
 
Datum registracije: May 2008
Lokacija: Rijeka
Postovi: 39
Vidi,

Server strana:
Dim L2 As String
L2 = "Ja sam server"
Winsock1.SendData L2

Klijent strana (Data Arrival Event):
Dim strData as String
sockMain.GetData strData

U varijablu strData dobivaš tekst koji si poslao, u ovom slučaju "Ja sam server"
Tekst može doći i u više navrata kao "Ja sam " pa "server" i tada se Data Arrival Event pokrene 2 puta. Zato bi trebao napraviti funkciju koja će sve stringove koji dolaze slagati u neki buffer, i drugu funkciju koja će čitati buffer i raspoređivati stringove iz njega i čistiti ga od onoga što rasporedi.

Ti samo sa stringom "Ja sam server" neznaš šta raditi, ali recimo ako pošalješ "NAME:Ja sam server" i taj string rastaviš na "NAME:" i ostatak odna ćeš znat da ti dolazi ime nečega pa imaš

IF Left$(strData, 5) = "NAME:" Then SetPlayerName(strData)

Ako je početak stringa koji je došao = "NAME:" zoveš funkciju SetPlayerNAme koja će postaviti ime igrača na nešto što si isprogramirao u njoj.

Opet kao šta sam spomenuo iznad, string nemora doć u cjelosti kako si ga poslao nego u više navrata pa ti može doć

"NAM" pa "E:Ja sam ser" pa "ver" zato staviše na početak <m> i na kraj </m> i ne radiš ništa sa stringom dok ne dođe cijeli, tj dok ne pronađeš <m> i </m> u njemu.

Nije Winsocket toliko trivijalan koliko se čini, mislim je što se osnovnih metoda tiče, ali ako radiš nešto složenije tipa igru moraš isprogramirati svoj okvir i svoj protokol.
Dungeon Keeper je offline   Reply With Quote
Staro 24.10.2009., 13:36   #8
malixx
Premium
 
Datum registracije: Feb 2009
Lokacija: Zagreb
Postovi: 74
Pa da, radim igru, ali tipa križić-kružić za početak, da skužim kako se to prenosi. Evo ti slika koju sam uplodo, ima server i client, i labeli od L1 do L9.
I sad kad ja nekaj promjenim u L1, tj upišem "X", na clientu u L1 mora pisati "X".. ako me kužiš, ja sam napravio samo L1, al ako ubacim L1 i L2 onda mi se u L1 upiše i L2 i sve, pa izgleda u L1 ovako "XXX" ili "XO".. evo slike kak izgleda forma:
Attached Thumbnails
Click image for larger version

Name:	untitled.JPG‎
Views:	146
Size:	43.1 kB
ID:	9969  
malixx je offline   Reply With Quote
Staro 24.10.2009., 15:07   #9
Dungeon Keeper
Registered User
 
Datum registracije: May 2008
Lokacija: Rijeka
Postovi: 39
Ja o jednom ti o drugom.

Klijent:

Code:
Private Sub L1_Click()
If player = "X" Then L1 = "Player:X"
turn.Caption = "O"
If player = "O" Then L1 = "Player:O"
turn.Caption = "X"
Winsock1.SendData L1  'šalje akciju na jedan klik u client
End Sub
Server:

Code:
    Dim strData As String
    Winsock1.GetData strData
    
    Dim Igrac As String
    Dim strPos As Long
    
    strPos = InStr(1, strData, "Player:")
    'Vraca poziciju stringa "Player:" u stringu strData u varijablu strPos

    If strPos Then Igrac = Mid$(strData, (strPos + 7), 1)
    'Ako je pronađen string "Player:" znači da se radi o poruci koja nosi ime igraca u sebi i tada se varijabli Igrac pridruzuje ime igraca, koje stoji u poruci odmah nakon stringa "Player:"
    
    MsgBox Igrac
Ovo je primjera radi

Inače bi ta tvoja poruka koju šalješ trebala na primjer izgledati ovako:

"<poruka>Player:X</poruka>"

Objasnio sam u prethodnim postovima zašto

Evo, još jedan primjer:

Code:
For Br = 1 to 10
    Winsock1.SendData Br
Next Br
Ovo će najvjerovatnije rezultirati da podaci dođu na server ovako
"012345678910"

a ti si htio dobiti 10 poruka sa 10 brojeva

Zato napraviš ovo
Code:
For Br = 1 to 10
    Winsock1.SendData "<msg>" & Br & "</msg>
Next Br
Pa podaci dođu na server ovako

"<msg>0</msg><msg>1</msg><msg>2</msg><msg>3</msg><msg>4</msg><msg>5</msg><msg>6</msg><msg>7</msg><msg>8</msg><msg>9</msg><msg>10</msg>"

I onda imaš funkciju koja će čitati brojeve iz ovog stringa tako što će provjeravati gdje se nalaze <msg> i </msg> koji označavaju početak i kraj.
Dungeon Keeper je offline   Reply With Quote
Staro 04.03.2010., 14:13   #10
Mr.Spock
Logično je biti logičan?
 
Datum registracije: Feb 2006
Lokacija: .
Postovi: 11
Treba dodati da se neki 'paketi' znaju i izgubiti, pa ne bi bilo loše isprogramirati povratnu informaciju nakon uspješno primljene i obrađene poruke.

Npr. klijent klikne na neko od polja i program(igra) pošalje poruku serveru, server ne dobije poruku i nastavi čekati. Klijent na svojoj strani 'vidi' da je kliknuo na neko polje i postavio znak, ali ne zna da server nije dobio poruku... i tako oni čekaju... i čekaju...

Tu možemo postaviti i neki 'timeout' koliko dugo 'čekam' dok mi ne stigne povratna informacija i ako zadano vrijeme prođe program(igra) javi igraču da poruka nije poslana i poništi zadnju akciju ili ju ponovi... dalje je na programeru da odluči.

Nadam se da je moj savjet bio koristan! :-)
Mr.Spock je offline   Reply With Quote
Oglasni prostor
Oglas
 
Oglas
Odgovori



Pravila postanja
Vi ne možete otvarati nove teme
Vi ne možete pisati odgovore
Vi ne možete uploadati priloge
Vi ne možete uređivati svoje poruke

BB code je Uključeno
Smajlići su Uključeno
[IMG] kod je Uključeno
HTML je Isključeno

Idi na