"Mads Jensen" <astrup_jensenNOSPAM@hotmail.com> wrote in
news:bbsb1f$gts$1@sunsite.dk:
> Hej
>
>> Håber det kan hjælpe :)
>
> Gjorde det desværre ikke
Prøvede dit forslag, men det giver stadig
> fejl!
Ok, men det var et stykke i den rigtige retning.
> connect() returnerer 1, men stadigvæk giver
>
> if (d = connect(sockfd, (struct sockaddr *)&address,
> sizeof(address)) < 0)
[SNIP]
Som Socketd skrev, er der problemer med denne if-sætning. Variablen d
kommer til at indeholde resultatet sammenligningen. d indeholder altså
*ikke* resultatet af kaldet til connect(), men derimod tallet 1 (TRUE),
hvis resultatet af kaldet var mindre end 0, eller tallet 0 (FALSE), hvis
resultatet var større end eller ligmed 0. Imidlertid vil linierne
> cout << "connect() returned " << d << endl;
> cout << '\a'; // should make it beep
> cerr << "Error occured at line: " << __LINE__ << endl;
alligevel kun blive udført, når resultatet af kaldet til connect() var
mindre end nul. Variablen d vil bare altid have værdien 1, uanset
resultatet af connect-kaldet. Hvis du vil have, at d skal indeholde
resultatet af kaldet til connect(), skal du i stedet skrive følgende if-
sætning:
if ((d=connect(sockfd,(struct sockaddr *)&address,sizeof(address)))<0)
(bemærk parenteserne om d=...)
Som sikrer, at sammenligningen først sker, når resultatet af connect()
er gemt i d.
Men nu til årsagen til, at connect() fejler. Den ligger helt tilbage i
kaldet til inet_addr(). Tidligere i koden skriver du følgende linie:
address.sin_addr.s_addr = inet_addr("mail.dht.dk");
Men funktionen inet_addr konverterer fra en "punktum-separeret" Ipv4-
addresse (fx "127.0.0.1") til en addresse, der kan bruges i en IN_ADDR-
struktur. Hvis ikke parametren opfylder dette format, returneres
konstanten INADDR_NONE. Prøv en gang at checke om dette er tilfældet
her.
En gennemgang af, hvordan du kan "resolve" adressen "mail.dht.dk" til en
Ip-adresse samt en gennemgang af hele opsætningen af en klient vha.
winsock kan findes på adressen:
http://www.district86.k12.il.us/central/activities/computerclub/Tutorial
s/Winsock/Index.htm
Men i første omgang kan du jo prøve blot at erstatte "mail.dht.dk" med
en ip-adresse i formatet "127.0.0.1".
Venlig hilsen
Christian Larsen