Re: CoolBasic & netti = cbNetwork
Posted: Mon Sep 06, 2010 1:18 pm
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.
Game Making Should Be Easy...
https://www.coolbasic.com/phpBB3/
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.
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.
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ä.
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
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
Code: Select all
Hash$ = MD5(Name$+Points)
Code: Select all
HTTPGet("http://jea.com/pisteet.php?nimi="+Name$+"&pisteet="+Points+"&hash="+Hash$)
Code: Select all
Hash$ = MD5(Name$+Points+"qwe123")
Code: Select all
$hash = md5($_GET[nimi].$_GET[pisteet]."qwe123");
Niin kuin kaikki muutkin cb-ohjelmat...TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
Hä, onko cb:stä decompleri??TheDuck wrote:Tämähän kaikki sitten lopulta murskaantuu kun killedwhale decompilee ohjelmasi ja tarkistaa hashin
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
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
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()
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ää.
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?