CoolBasic & netti = cbNetwork
-
- Newcomer
- Posts: 6
- Joined: Wed Dec 23, 2009 6:32 pm
Re: CoolBasic & netti = cbNetwork
Kun otan clientillä yhteyden osoiteeseen "localhost": se onnistuu,
mutta jos osiote onkin IP: se ei toimi! Kiitos.
mutta jos osiote onkin IP: se ei toimi! Kiitos.
Re: CoolBasic & netti = cbNetwork
Ehkä ko. osoitteessa ei ole kuuntelevaa socketia auki?pikkuleipä wrote:Kun otan clientillä yhteyden osoiteeseen "localhost": se onnistuu,
mutta jos osiote onkin IP: se ei toimi! Kiitos.
Re: CoolBasic & netti = cbNetwork
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ää?pikkuleipä wrote:Kun otan clientillä yhteyden osoiteeseen "localhost": se onnistuu,
mutta jos osiote onkin IP: se ei toimi! Kiitos.
Ja niin, jotta voisit tarkistaa oletko NATin takana, niin kerro meille minkä IP:n takana koneesi on. Seuraa näitä ohjeita:
- Paina Windows-näppäintä + R tai mene Käynnistä -> suorita.
- Kirjoita siihen "Suorita..." (tai "Run" jos englanniksi) ikkunaan cmd
- Kirjoita avautuvaan komentoriviin komento ipconfig. Se näyttää sinun internet-yhteytesi tiedot.
- Etsi sieltä kohta IP-osoite ja kerro meille mikä numerosarja sen perässä on. Siinä voi myös lukea IPv4-osoite.
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
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: CoolBasic & netti = cbNetwork
Tämä riippuu reitittimestä. Esimerkiksi minun reitittimessä lähiverkon osoitteet ovat 10.0.0.x.VesQ wrote:Jos osoite on muotoa 192.168.jotain.jotain niin sinulla on NAT päällä.
Projektit: Fiperus - Jäädytetty pidemmäksi aikaa.
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Voitot: Viikkokisa XIII, Pikapelikisa 3, Pikapelikisa 13
http://www.sami345.tk/
Re: CoolBasic & netti = cbNetwork
Eli yritin tehdä lukijaa joka lukee tietoa sivustani, mutta tämä nykyinen koodi antaa virheen ja se menee näin:
Errori on PeekByte failed
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
Re: CoolBasic & netti = cbNetwork
http://vesq.org/filestorage/cbkk/GetHTTPString.CB (btw, tää on kolmas kerta ku sulle tuo linkki annetaa)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
Käskinkö lukea ekan postin? Ja erityisesti sen kohdan missä puhutaan tutosta. Tarkoitin että lue se tutokin!
Re: CoolBasic & netti = cbNetwork
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:tämä loisi MD5:n merkkijonosta "CoolGuy1337".
Sitten lähetämme tiedot HTTPGetillä PHP:lle: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 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.Jonka jälkeen vain tarkistamme onko hashit samat. (eli jos $hash == $_GET[hash])
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)
Sitten lähetämme tiedot HTTPGetillä PHP:lle:
Code: Select all
HTTPGet("http://jea.com/pisteet.php?nimi="+Name$+"&pisteet="+Points+"&hash="+Hash$)
Jotta tuo ei onnistuisi niin helposti, voimme lisätä vielä hashattavaan merkkijonoon jotain merkkejä. Esimerksiksi
Code: Select all
Hash$ = MD5(Name$+Points+"qwe123")
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");
Last edited by Viltzu on Sat Feb 12, 2011 9:29 pm, edited 3 times in total.
- TheDuck
- Devoted Member
- Posts: 632
- Joined: Sun Aug 26, 2007 3:51 pm
- Location: C:\Program Files\Tuusula\
Re: CoolBasic & netti = cbNetwork
Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
^^
Re: CoolBasic & netti = cbNetwork
Niin kuin kaikki muutkin cb-ohjelmat...TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
Re: CoolBasic & netti = cbNetwork
Hä, onko cb:stä decompleri??TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
-
- Forum Veteran
- Posts: 2396
- Joined: Tue Aug 28, 2007 4:20 pm
Re: CoolBasic & netti = cbNetwork
Juu, decompiler löytyy. Sen on tehnyt KilledWhale eikä KW ole sitä afaik kenellekään missään vaiheessa jakanut.
Re: CoolBasic & netti = cbNetwork
Jep, KW on joskus sellaisen tehnyt.legend wrote:Hä, onko cb:stä decompleri??TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
Re: CoolBasic & netti = cbNetwork
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.DJ-Filbe wrote:Jep, KW on joskus sellaisen tehnyt.legend wrote:Hä, onko cb:stä decompleri??TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
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
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: CoolBasic & netti = cbNetwork
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.
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.
- Attachments
-
- Lentely.rar
- (1.2 MiB) Downloaded 446 times
Re: CoolBasic & netti = cbNetwork
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:
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.
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()
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
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
Re: CoolBasic & netti = cbNetwork
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ää.
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 427 times
Re: CoolBasic & netti = cbNetwork
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.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ää.
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
NetMatch - se kunnon nettimättö-deathmatch! Avoimella lähdekoodilla varustettu
vesalaakso.com
-
- Devoted Member
- Posts: 718
- Joined: Wed Nov 03, 2010 7:56 pm
- Location: Joku piste pohjoisessa.
Re: CoolBasic & netti = cbNetwork
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...
<Ize> Vois keksiä jonkin nasahtavan sanonnan..
<Ize> Siitä tulis upea legenda ja kaikki vaihtaisivat allekirjoituksensa siihen.
<Ize> Ehkä ei kuitenkaa...
Re: CoolBasic & netti = cbNetwork
En ny mieti yhtää mitää, mut väitän että SaveGamea ei kannata käyttää ikinä. Paras aina tehdä oma save systeemi.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?