![]() |
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 Code:
Dim dat As String 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 ! |
kaj se niko sad u ovo ne kuži???
|
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: Pa da podaci i dođu zajedno izgledalo bi " 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 :D |
Hm al ti si to stavio sve u navodnike?
i šta je ovo 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). ? |
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. " " Ja sam primjera radi napiaso taj a ti možeš koristii bilo koji niz znakova s kojim ćeš označiti početak i kraj poruke. Staviš Moraš osmisliti svoj način na koji ćeš slati podatke sa servera na klijenta. |
Citiraj:
Pošalješ recimo " Onda na Klijentu provjeriš dali primljeni string sadržava string " Prouči malo kako InStr funkcija radi. |
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 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. |
1 privitaka
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: |
Ja o jednom ti o drugom.
Klijent: Code:
Private Sub L1_Click() Code:
Dim strData As String Inače bi ta tvoja poruka koju šalješ trebala na primjer izgledati ovako: " Objasnio sam u prethodnim postovima zašto Evo, još jedan primjer: Code:
For Br = 1 to 10 "012345678910" a ti si htio dobiti 10 poruka sa 10 brojeva Zato napraviš ovo Code:
For Br = 1 to 10 " I onda imaš funkciju koja će čitati brojeve iz ovog stringa tako što će provjeravati gdje se nalaze |
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! :-) |
Sva vremena su GMT +2. Sada je 09:26. |
Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 1999-2024 PC Ekspert - Sva prava pridržana ISSN 1334-2940
Ad Management by RedTyger