Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C: UDP-socket ja käyttäjien tunnistaminen

ville-v [01.01.2008 10:53:19]

#

Teen socketeja käyttävää serveriä (kyllä, peliin), ja nyt tarvitsisi tunnistaa käyttäjiä.

UDPsocket serversock;
serversock = SDLNet_UDP_Open(serverport);
while(!quit){
    ota_dataa_socketista();
    lähetä_vastaus();
}
SDLNet_UDP_Close(serversock);

Mitä jos kuitenkin haluaisin tunnistaa käyttäjät?

while(!quit){
    ota_dataa_socketista();
    if(user == 1) vastaus = "moi";
    if(user == 2) vastaus = "häivy";
    lähetä_vastaus();
}

SDL_net tarjoaa ainoaksi vaihtoehdoksi IP-osoitteen, mutta entäs jos samasta IP-osoitteesta on useita käyttäjiä?

En haluaisi lähettää käyttäjä-id:tä koko ajan mukana koska silloin käyttäjillä on mahdollisuus käydä käsiksi jonkun toisen yhteyteen lähettämällä väärä id, mutta onko se kuitenkin ainoa ratkaisu?

Vai pitäisikö joka käyttäjälle luoda oma socket? Miten tämä hoituisi ilman threadien käyttöä?

lapm [01.01.2008 11:19:49]

#

Sanoisin että se pelaajan tunnistus täytyy upottaa sinne varsinaiseen dataan jota siirrellään. Eli klientti muodostaa jollain tavalla uniikin id numeron itselleen, jonka se sitten liittää joka data lähetykseen jonka se heittää serverin suntaan.

Näin myös saman IPn takana pelaavat saadaan eroteltua toisistaan, koska jokaisella on se uniikki id joka tapaukssa.

Ai niin, jos et tee mitään reaaliaika strategiaa, tms.. jossa UDP protokollasta on hyötyä niin kannattaisi käyttää TCP protokollaa. Ihan vaan että NAT boksien takanakin olevat klientit toimivat.

UDP kun edellyttää klientti päässä reijän tekemistä erikseen palomuuriin.

ville-v [01.01.2008 16:05:48]

#

lapm kirjoitti:

Sanoisin että se pelaajan tunnistus täytyy upottaa sinne varsinaiseen dataan jota siirrellään. Eli klientti muodostaa jollain tavalla uniikin id numeron itselleen, jonka se sitten liittää joka data lähetykseen jonka se heittää serverin suntaan.

Näin myös saman IPn takana pelaavat saadaan eroteltua toisistaan, koska jokaisella on se uniikki id joka tapaukssa.

Tutustuin tuohon SDL_netiin enemmän, ja eikös tämä ratkea SocketSeteillä niin ettei id-numeroa tarvitse lähettää?

Grey [01.01.2008 19:38:04]

#

IP + ID? Eli tunnistus sekä IP:n että ID:n mukaan. IP:n alla on tietyt ID:t, ja jos ID tai IP ei täsmää, hylätään pyyntö. Toki jos sitten saman IP:n kautta krakkeri yrittää jotain, mutta sellainen lienee pienempi riski kuitenkin..

-Grey-

Gaxx [02.01.2008 02:15:53]

#

Vastaanotetusta paketista ei voi täydellä varmuudella päätellä, kuka sen on lähettänyt, sillä Lähettäjä voi tehdä paketista juuri sellaisen, kuin haluaa. Tästä johtuen IP:n ja ID:n yhdistelmä on paras tapa toteuttaa tarkistusta, jos mukaan ei sotketa suurempia salauksia.

PS. Vastasin "UDP -verkkosysteemi" -vinkkiini jättämääsi ongelmaan.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta