Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C ja gethostbyaddr

Lotto [22.01.2010 20:36:49]

#

Hei!
Probleemana tällä kertaa gethostbyname. Kun koitan kääntää tämän koodin:

#include <stdio.h>
#include <winsock.h>

void ircconnect(char *serveri, int portti);
int main(void){

    ircconnect("irc.cc.tut.fi", 6667);
    return 0;
}
void ircconnect(char *serveri, int portti){
    char ip[18];
    SOCKET sock;
    ip = gethostbyname(serveri);
    if((sock = socket(AF_INET, SOCK_STREAM, 0)) != -1){
             printf("Soketti luotiin!\n");
    }
}

kääntäjä ystävällisesti ilmoittaa minulle virheen

 C:\Documents and Settings\Lotto\Työpöytä\irkki.c In function `ircconnect':
14 C:\Documents and Settings\Lotto\Työpöytä\irkki.c incompatible types in assignment

Nyt ei ymmärrä mikä mättää :/
Tästä siis on vasta tulossa irc-botin runko, ja ei siten sisällä vielä mitään yhteyden sulkuja sun muita ;)

Metabolix [22.01.2010 20:49:11]

#

No katsopa sitten, mitä se funktio palauttaa. Ei todellakaan char-taulukkoa (jota ei muutenkaan voisi noin sijoituksella ottaa vastaan).

_Pete_ [23.01.2010 10:21:18]

#

Lotto kirjoitti:

Hei!

void ircconnect(char *serveri, int portti)

Tässä funktiossa sellainenkin vika, että yritetään aina socket 0 porttiin joka
ei tule onnistumaan...

alottelijaa [23.01.2010 13:19:52]

#

if((sock = socket(AF_INET, SOCK_STREAM, portti)) != -1){
             printf("Soketti luotiin!\n");
    }

tilalle.

Metabolix [23.01.2010 13:41:55]

#

_Pete_ ja aloittelijaa: Katsokaapa tekin, mitkä ovat socket-funktion parametrit. Tältä osin alkuperäinen koodi on aivan oikea, tosin IPPROTO_TCP voisi olla vielä nollaa parempi.

Milo [23.01.2010 13:43:16]

#

Hmm topicissa sanotaan "gethostbyaddr" ja koodissa kutsutaan "gethostbyname".

Olisi ihan syytä tarkistaa mitä gethostbyname() tekee.
http://msdn.microsoft.com/en-us/library/ms738524(VS.85).aspx

Tai gethostbyaddr()
http://msdn.microsoft.com/en-us/library/ms738521(VS.85).aspx

Näyttää palauttavan pointerin hostent -nimiseen structiin. Ja nyt olisi varmaan hyvä tietää mitä hostent -struct pitää sisällään:
http://msdn.microsoft.com/en-us/library/ms738552(VS.85).aspx

Molempien gethostby* sivujen koodiesimerkissä kerrotaan miten tuolta löydetään IP-osoite. AF_INET on vain vakio, jonka arvo on kaksi. Eli kannattaa myös tarkistaa oliko tuo se parametri mitä haluttiin?

Vastaus

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

Tietoa sivustosta