CoolBasic & netti = cbNetwork

Oletko tehnyt jotain, mistä muut voisivat hyötyä. Postita vinkit tänne.
pikkuleipä
Newcomer
Posts: 6
Joined: Wed Dec 23, 2009 6:32 pm

Re: CoolBasic & netti = cbNetwork

Post by pikkuleipä »

Kun otan clientillä yhteyden osoiteeseen "localhost": se onnistuu,
mutta jos osiote onkin IP: se ei toimi! Kiitos.
User avatar
esa94
Guru
Posts: 1855
Joined: Tue Sep 04, 2007 5:35 pm

Re: CoolBasic & netti = cbNetwork

Post by esa94 »

pikkuleipä wrote:Kun otan clientillä yhteyden osoiteeseen "localhost": se onnistuu,
mutta jos osiote onkin IP: se ei toimi! Kiitos.
Ehkä ko. osoitteessa ei ole kuuntelevaa socketia auki?
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: CoolBasic & netti = cbNetwork

Post by valscion »

pikkuleipä wrote:Kun otan clientillä yhteyden osoiteeseen "localhost": se onnistuu,
mutta jos osiote onkin IP: se ei toimi! Kiitos.
Mitä luultavimmin palomuuri tai NAT-päällä oleva reititin aiheuttaa ongelman. Sinun tulee avata palomuuristasi tarpeellinen portti ohjelmasi toimimista varten ja mahdollisesti reitittää siitä reitittimestäsi kyseinen portti omalle koneellesi myös. Mutta millaistas virhettä sieltä tulee? Muistithan että palvelimen tulee olla auki ennen kuin siihen voi yhdistää?

Ja niin, jotta voisit tarkistaa oletko NATin takana, niin kerro meille minkä IP:n takana koneesi on. Seuraa näitä ohjeita:
  1. Paina Windows-näppäintä + R tai mene Käynnistä -> suorita.
  2. Kirjoita siihen "Suorita..." (tai "Run" jos englanniksi) ikkunaan cmd
  3. Kirjoita avautuvaan komentoriviin komento ipconfig. Se näyttää sinun internet-yhteytesi tiedot.
  4. Etsi sieltä kohta IP-osoite ja kerro meille mikä numerosarja sen perässä on. Siinä voi myös lukea IPv4-osoite.
Jos osoite on muotoa 192.168.jotain.jotain niin sinulla on NAT päällä. Tällöin kannattaa mennä tänne: http://portforward.com ja seurata ohjeita.

EDIT: Itse olen joskus pienenä nappulana saanut portit ohjattua käyttämällä tätä ohjetta Blockland-nimiseen peliin. Vaihdat vain portin oikeaksi, niin saman ohjeen tulisi toimia sinun ohjelmallasikin.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Sami345
Advanced Member
Posts: 349
Joined: Fri Aug 31, 2007 4:52 pm
Contact:

Re: CoolBasic & netti = cbNetwork

Post by Sami345 »

VesQ wrote:Jos osoite on muotoa 192.168.jotain.jotain niin sinulla on NAT päällä.
Tämä riippuu reitittimestä. Esimerkiksi minun reitittimessä lähiverkon osoitteet ovat 10.0.0.x.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
mika132
Newcomer
Posts: 30
Joined: Sun Jul 12, 2009 1:31 pm

Re: CoolBasic & netti = cbNetwork

Post by mika132 »

Eli yritin tehdä lukijaa joka lukee tietoa sivustani, mutta tämä nykyinen koodi antaa virheen ja se menee näin:

Code: Select all

Include "cbNetwork.cb"
FrameLimit 40
rtn = HTTPGet("http://pelila.com/racer_versio.txt")
this$ = _Net_GetString()
HTTPSaveContent("tmp.html")
AddText "Löytyi: " +this
DeleteFile "tmp.html"
DrawScreen
WaitKey

Errori on PeekByte failed
Business manager - companys mini pack
Tämä on Companys peliin tuleva lisä osa jonka mukana tulee mm.
- Raha pelejä
- Bugi korjauksia
- Yksi botti firma
- Pullon palautus automaatti
- pankki automaatti
Eli kaikkea sälää.
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: CoolBasic & netti = cbNetwork

Post by Viltzu »

mika132 wrote:Eli yritin tehdä lukijaa joka lukee tietoa sivustani, mutta tämä nykyinen koodi antaa virheen ja se menee näin:

Code: Select all

Include "cbNetwork.cb"
FrameLimit 40
rtn = HTTPGet("http://pelila.com/racer_versio.txt")
this$ = _Net_GetString()
HTTPSaveContent("tmp.html")
AddText "Löytyi: " +this
DeleteFile "tmp.html"
DrawScreen
WaitKey

Errori on PeekByte failed
http://vesq.org/filestorage/cbkk/GetHTTPString.CB (btw, tää on kolmas kerta ku sulle tuo linkki annetaa)
Käskinkö lukea ekan postin? Ja erityisesti sen kohdan missä puhutaan tutosta. Tarkoitin että lue se tutokin!
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: CoolBasic & netti = cbNetwork

Post by Viltzu »

Ajattelinpa kertoa hieman miten on turvallista lähettää esimerkiksi pelistä pisteet nettilistaan.
Asian ydin on tietenkin hashaus. Bagardin koodaama MD5-funktio käy tähän tarkoitukseen hyvin. PHP:n puolella on sitten valmis funktio MD5:n luomiseen.

Tämä on yksinkertainen tapa saada pisteiden lähetys turvallisemmaksi ja vaikeammaksi huijata vääriä pisteitä.
Otetaan esimerkiksi, että CoolGuy sai 1337 pistettä pelissäsi, kun pisteet aiotaan lähettää nettiin laitamme mukaan vaikka nimestä ja pisteistä muodostetun MD5-hashin. Eli PHP vastaanottaisi 3 arvoa. Nimi, pisteet sekä hash.

Sovitaan, että nimi on asetettu muuttujaan Name$ sekä pisteet muuttujaan Points.
Käytetään Bagardin koodaamaa funktiota:

Code: Select all

Hash$ = MD5(Name$+Points) 
tämä loisi MD5:n merkkijonosta "CoolGuy1337".
Sitten lähetämme tiedot HTTPGetillä PHP:lle:

Code: Select all

HTTPGet("http://jea.com/pisteet.php?nimi="+Name$+"&pisteet="+Points+"&hash="+Hash$)
Tämä ei kuitenkaan ole vielä kovinkaan turvallinen, koska pelaaja voi helposti itse luoda hashin nimestään ja pisteistään ja selaimella tehdä tuon saman mitä me teemme nyt HTTPGetillä.
Jotta tuo ei onnistuisi niin helposti, voimme lisätä vielä hashattavaan merkkijonoon jotain merkkejä. Esimerksiksi

Code: Select all

Hash$ = MD5(Name$+Points+"qwe123")
Tämä riittänee ihan hyvin, mutta voit keksiä itse lisää säätöä. (Sisäkkäiset komennot voivat vaikeuttaa exen sörkkimistä.)


Mitä meidän pitää tehdä php:ssä, on hashata nimi+pisteet+salainen merkkijono ja tarkistaa sopiiko se CB:n puolella hashattuun.
Eli käytämme yksinkertaisesti $_GET:iä poimimaan kyseiset asiat.

Code: Select all

$hash = md5($_GET[nimi].$_GET[pisteet]."qwe123");
Jonka jälkeen vain tarkistamme onko hashit samat. (eli jos $hash == $_GET[hash])
Last edited by Viltzu on Sat Feb 12, 2011 9:29 pm, edited 3 times in total.
User avatar
TheDuck
Devoted Member
Posts: 632
Joined: Sun Aug 26, 2007 3:51 pm
Location: C:\Program Files\Tuusula\

Re: CoolBasic & netti = cbNetwork

Post by TheDuck »

Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin :P
^^
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: CoolBasic & netti = cbNetwork

Post by DJ-Filbe »

TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin :P
Niin kuin kaikki muutkin cb-ohjelmat...
legend
Advanced Member
Posts: 371
Joined: Wed Nov 18, 2009 8:06 pm

Re: CoolBasic & netti = cbNetwork

Post by legend »

TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin :P
Hä, onko cb:stä decompleri??
Koodiapina
Forum Veteran
Posts: 2396
Joined: Tue Aug 28, 2007 4:20 pm

Re: CoolBasic & netti = cbNetwork

Post by Koodiapina »

On.
Awaclus
Forum Veteran
Posts: 2939
Joined: Tue Aug 28, 2007 2:50 pm

Re: CoolBasic & netti = cbNetwork

Post by Awaclus »

Juu, decompiler löytyy. Sen on tehnyt KilledWhale eikä KW ole sitä afaik kenellekään missään vaiheessa jakanut.
DJ-Filbe
Devoted Member
Posts: 854
Joined: Sat Feb 20, 2010 2:18 pm

Re: CoolBasic & netti = cbNetwork

Post by DJ-Filbe »

legend wrote:
TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin :P
Hä, onko cb:stä decompleri??
Jep, KW on joskus sellaisen tehnyt.
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: CoolBasic & netti = cbNetwork

Post by valscion »

DJ-Filbe wrote:
legend wrote:
TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin :P
Hä, onko cb:stä decompleri??
Jep, KW on joskus sellaisen tehnyt.
Niin on, mutta pyytäisin että silti pysyttäisiin aiheessa. KW ei kyllä jakele muiden ohjelmien koodeja ja jos hän käyttää decompileriaan, niin usein hän tekee sen vain huvikseen. Ei KW kuitenkaan nyt mikään ilkimys ole ja ala jakelemaan sitä salaista merkkijonoa kaikille muille - eli ihan huoleti voitte tehdä niitä ennätysilistoja nettiin Viltzun ohjeiden mukaan. Ei KW siitä mitään hyödy, jos katsoo sen salaisen merkkijonon, ei hän kuitenkaan mikään lapsellinen trolli/vandaali ole.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Noun
Newcomer
Posts: 19
Joined: Sun May 08, 2011 8:17 pm
Contact:

Re: CoolBasic & netti = cbNetwork

Post by Noun »

Tervehdys, iloiset veikot.

Yritän virittää kasaan jonkinlaista monen pelaajan avaruusräiskintää. Clientin 1 alus lentelee servun ikkunassa oikein nätisti, mutta kun client 2 yhdistää, tämän alus vain möllöttää paikallaan. En keksi miten tämän voisi korjata, vika on kuitenkin varmaan tuossa servun koodin riviltä 37 lähtien olevassa pätkässä. Jelppiä?

Kippasin koodit ja kuvat liitteeksi. Kiitos jo etukäteen. :D
Attachments
Lentely.rar
(1.2 MiB) Downloaded 444 times
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: CoolBasic & netti = cbNetwork

Post by valscion »

Jepjep. Vähän jännät sisentelyt sulla, kieltämättä, teki bugin ettimisestä vähän hankalampaa. Löysinpä kuitenkin, vika oli siinä että käytit funktiota _Net_GetInt() palvelimen For...Each loopissa joka kierroksella. Tässä korjattu versio:

Code: Select all

Include "cbNetwork.cb"

SetWindow "Servuke"

SAFEEXIT OFF

Include "Globals.cb"

    rtn = InitServer( UDP_PORT, 100 )

    If rtn <> 0 Then MakeError GetNetErrorString( rtn )
    SetWindow "Servuke - Startannut onnellisesti"

Repeat
        rtn = ServerRead()
        
        If rtn = 0 Then
            'Koko veks
            _Net_GetInt()
            infoByte = _Net_GetByte()
            
            If infoByte = INFO_STARTING_CONNECTION Then
                SetWindow "Servuke - Client yhdisti"
                alus.ALUUT=New(ALUUT)
                alus\id=_Net_GetInt()
                alus\obj=LoadObject("alus1.png",180) 'Serveri näyttää alukset havainnollistavista syistä. Ei tule lopulliseen.
                clients+1
                _Net_InitMemBlock()
                _Net_PutByte( infoByte )
            ElseIf infoByte = INFO_CLOSING_CONNECTION Then
                SetWindow "Servuke - Client katkaisi"
                clients-1
                _Net_InitMemBlock()
                _Net_PutByte( infoByte )
            ElseIf infoByte = INFO_SEND_INFO Then
                aluskontrollissa=_Net_GetInt() // <--------------------- Tämä oli sinulla alemman For...Each loopin SISÄLLÄ, kun sen tietenkin täytyy olla ulkopuolella.
                For alus.ALUUT=Each ALUUT
                    If aluskontrollissa=alus\id Then
                        alus\x=_Net_GetInt()
                        alus\y=_Net_GetInt()
                        alus\angle=_Net_GetInt()
                        Exit
                    EndIf 
                Next alus
                _Net_InitMemBlock()
                _Net_PutByte( infoByte )
                For alus.ALUUT=Each ALUUT
                _Net_PutInt(alus\x)
                _Net_PutInt(alus\y)
                _Net_PutInt(alus\angle)
                Next alus
            EndIf
            
            For alus.aluut=Each aluut
                PositionObject alus\obj,alus\x,alus\y
                RotateObject alus\obj,alus\angle
            Next alus

            ServerSend()
                
         EndIf

            Text 10,10,"Clients: "+clients
            For alus.ALUUT=Each ALUUT 'Epäkäytännöllistä kuonaa
            Text 10,20,"X: "+alus\x
            Next alus
            Text 10,40,"FPS: "+FPS()
            DrawScreen
Until EscapeKey()
While EscapeKey() : Wend
CloseServer()
Pikku vinkkinä voisin sanoa sen, että sinun EI tarvitse tehdä jollain rand-funktion avulla omaa ID:tä. Käytä cbNetworkin sisäistä ID:tä erottamaan clientit toisistaan, kts. globaali Net_ClientId.
EDIT: Katso vaikkapa miten NetMatchissa tallennetaan NET_ClientId globaalin tieto palvelimella.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
User avatar
Noun
Newcomer
Posts: 19
Joined: Sun May 08, 2011 8:17 pm
Contact:

Re: CoolBasic & netti = cbNetwork

Post by Noun »

Kas vain, sekös siinä olikin. Kiitoksia oikein paljon. Yritän oppia paremmille tavoille sisennyksissä, niitä tulee lätkittyä vähän minne sattuu. Ja saattaa tuo johtua myös osittain siitä että tuo on rakennettu valtzu.arkku.netin esimerkkiohjelman päälle.

Seuraavaksi yritin saada clientissä näkymään muutkin kuin pelaajan alukset, mutta se ei jostain syystä toimi. Mitään virheilmoitusta ei tule, mutta ketään ei näy. Kun servulle ilmestyy uusi pelaaja, pistän sen lähettämään tiedon tästä clieteille, jolloin niissä luodaan uusi objekti. Jota ei kuitenkaan näy eikä kuulu. Tähän liittyvät jutut alkavat clientin koodin riviltä 77 ja servun koodin riviltä 30.
Jos nyt tähän vielä kehtaisi apua pyytää. :)
Attachments
Lentely_2.rar
(1.2 MiB) Downloaded 424 times
User avatar
valscion
Moderator
Moderator
Posts: 1599
Joined: Thu Dec 06, 2007 7:46 pm
Location: Espoo
Contact:

Re: CoolBasic & netti = cbNetwork

Post by valscion »

Noun wrote:Kas vain, sekös siinä olikin. Kiitoksia oikein paljon. Yritän oppia paremmille tavoille sisennyksissä, niitä tulee lätkittyä vähän minne sattuu. Ja saattaa tuo johtua myös osittain siitä että tuo on rakennettu valtzu.arkku.netin esimerkkiohjelman päälle.

Seuraavaksi yritin saada clientissä näkymään muutkin kuin pelaajan alukset, mutta se ei jostain syystä toimi. Mitään virheilmoitusta ei tule, mutta ketään ei näy. Kun servulle ilmestyy uusi pelaaja, pistän sen lähettämään tiedon tästä clieteille, jolloin niissä luodaan uusi objekti. Jota ei kuitenkaan näy eikä kuulu. Tähän liittyvät jutut alkavat clientin koodin riviltä 77 ja servun koodin riviltä 30.
Jos nyt tähän vielä kehtaisi apua pyytää. :)
Ongelmasi johtuu siitä periaatteellisesta virheestä, että koitat lähettää clienteille tiedon samalla silmukan kerralla, kun uusi yhdistää. ServerRead-funktio asettaa sen clientin, jolta data luettiin, samaksi jolle data lähetetään - eli dataa ei lähetetä yhden silmukan aikana kuin sille jolta sitä alun perin luettiinkin! Sinun pitää laittaa jonkinmoinen tieto ohjelmaasi siitä, että kaikille pelaajille pitää lähettää tieto uuden pelaajan liittymisestä. Sinulle tulee vielä eteen vastaavanlaisia ongelmia, esimerkiksi chattiviestien kanssa, joten suosittelisin vahvasti tekemään uuden tyyppikokoelman, joka pitäisi sisällään tiedot clienteille lähtevästä datasta. Sitten kun silmukassa tulisi oikean pelaajan vuoro, niin tuon viesti-tyyppikokoelman juuri tälle pelaajalle tarkoitetut viestit lähetettäisiin eteenpäin. Tämän homman toteutus on aika lailla samanlainen kuin cbNetworkin paketin mukana tulevan chattiesimerkin toteutus.

Voit myös tutustua NetMatchin toteutukseen lataamalla projektin lähdekoodit tästä: ZIP-paketti. Kannattaa tutustua erityisesti NetMessage.cb tiedostossa sijaitsevaan NET_MESSAGES tyyppikokoelmaan. Tätä kokoelmaa käytetään, kun palvelimelta lähetetään kaikki clientille osoitetut tiedot palvelimen luku/lähetysloopissa, kts. Server.cb rivi 571 eteenpäin.
cbEnchanted, uudelleenkirjoitettu runtime. Uusin versio: 0.4.1 — Nyt myös sorsat GitHubissa!
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
naputtelija
Devoted Member
Posts: 718
Joined: Wed Nov 03, 2010 7:56 pm
Location: Joku piste pohjoisessa.

Re: CoolBasic & netti = cbNetwork

Post by naputtelija »

Toimiiko tuo coolbasicin SaveGame tämän kanssa ihan normaalisti? Eli ideana olisi se, että uuden clientin tullessa linjoille sen lähettämä ID tarkastetaan ja jos se on uusi, sama clientin ID tallennetaan serverin puolelle ja peli tallennetaan. Jos se on taas vanha, serveri antaa oman pelitilanteensa takaisin. Entä onko tälle minun idealleni jotain käytännöllisempää ratkaisua?
<Ize> Pitäs tehä allekirjotus..
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Viltzu
Guru
Posts: 1132
Joined: Sun Aug 26, 2007 5:45 pm
Location: Alavieska
Contact:

Re: CoolBasic & netti = cbNetwork

Post by Viltzu »

naputtelija wrote:Toimiiko tuo coolbasicin SaveGame tämän kanssa ihan normaalisti? Eli ideana olisi se, että uuden clientin tullessa linjoille sen lähettämä ID tarkastetaan ja jos se on uusi, sama clientin ID tallennetaan serverin puolelle ja peli tallennetaan. Jos se on taas vanha, serveri antaa oman pelitilanteensa takaisin. Entä onko tälle minun idealleni jotain käytännöllisempää ratkaisua?
En ny mieti yhtää mitää, mut väitän että SaveGamea ei kannata käyttää ikinä. Paras aina tehdä oma save systeemi.
Post Reply