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 ;)
No katsopa sitten, mitä se funktio palauttaa. Ei todellakaan char-taulukkoa (jota ei muutenkaan voisi noin sijoituksella ottaa vastaan).
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...
if((sock = socket(AF_INET, SOCK_STREAM, portti)) != -1){ printf("Soketti luotiin!\n"); }
tilalle.
_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.
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?
Aihe on jo aika vanha, joten et voi enää vastata siihen.