winsocks hostname auflösen linkererror

Code:
#include <iostream>
#include <winsock2.h>
#include <windows.h>

using namespace std;

char ip[] = {"192.168.1.4"};
int port = 80;
long rc;
SOCKET Socket;
char buffer[256];
SOCKADDR_IN addr;
HWND hwnd;

int startWinsock(void);
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);
int WSAStartup (WORD wVersionRequested, LPWSADATA lpWSAData);

int main(int argc, char** argv)
{ 
    if(argc<2)
    {
        cout<<"Usage: sock <hostname oder ip des servers>"<<endl;
        return 1;
    }
    
    rc=startWinsock();
    if(rc!=0)
    {
        cout<<"Fehler startWinsocks Fehlercode "<<rc<<endl;
        cin.get();
        return 1; 
    }
    else
    {
        ;
    }
    
    Socket=socket(AF_INET,SOCK_STREAM,0);
    
    if(Socket==INVALID_SOCKET)
    {
        //cout<<"Fehler Socket konnte nicht erstellt werden fehlercode :"<<WSAGetLastError()<<endl;
        //cin.get();
        return 1;
    }

    else
    {
        ;
    }
    
    memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten 

    addr.sin_family=AF_INET;

    addr.sin_port=htons(port); // wir verwenden mal port 12345

    rc=getAddrFromString(argv[1],&addr);
    if(rc==SOCKET_ERROR)
    {
        cout<<"IP für "<<argv[1]<<" konnte nicht aufgeloest werden"<<endl;
        return 1;
    }
    else
    {
        cout<<"IP aufgeloest!"<<endl;
    }

    rc=connect(Socket,(SOCKADDR*)&addr,sizeof(SOCKADDR));

    if(rc==SOCKET_ERROR)
    {
        cout<<"Fehler: connect gescheitert fehlercode "<<WSAGetLastError()<<endl;
        cin.get();
        return 1;
    }
............
.......

also das ist mein client ich wil auf nen hostname connecten jetzt bekomm ich aber immer nen linker error
"[Linker error] undefined reference to 'getAddrFromString(char*, sockaddr_in*)"
also ich hab alle nötigen libarys eingebunden daran kanns nich liegen. (benutzt den dev-c++ compiler)
 
1) lass mal die Zeilen 15-17 weg. Funktions-Prototypen sind normalerweise bereits in der Headerdatei definiert
2) dev-c++ ist die Ursache für grundsätzlich ALLE Fehler
 
Also des mit den zeilen weglassn hatte ich auch schon versucht was könnte den sonst noch falsch sein weil ich hab keine ahnung mehr.
ps was wäre denn z b ein guter compiler
 
Hallo, dein Problem ist das die getAddrFromString Frunktion keine standard API Funktion ist. Also solltest du die schon implementieren. Vermutlich arbeitest du nach dem c worker Tutorial dafür haste hier den Code:

Code:
long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr)
{
  long rc;
  unsigned long ip;
  HOSTENT* he;

  /* Parameter prüfen */
  if(hostnameOrIp==NULL || addr==NULL)
    return SOCKET_ERROR;

  /* eine IP in hostnameOrIp ? */
  ip=inet_addr(hostnameOrIp);

  /* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */
  if(ip!=INADDR_NONE)
  {
    addr->sin_addr.s_addr=ip;
    return 0;
  }
  else
  {
    /* Hostname in hostnameOrIp auflösen */
    he=gethostbyname(hostnameOrIp);

    if(he==NULL)
    {
      return SOCKET_ERROR;
    }
    else
    {
      /*die 4 Bytes der IP von he nach addr kopieren */
      memcpy(&(addr->sin_addr),he->h_addr_list[0],4);
    }

    return 0;
  }
}

Wenn du die eingebaut hast sollte es gehen und lass dir nicht einreden das dev-c++ schlecht ist. Zumal das eine IDE ist die absolut nichts mit derartigen Fehlermeldungen zu tun hat die kommen von Compiler bzw Linker.
Also davon abgesehen das ich dir für Netzwerkprogrammierung eh zu Linux raten würde wo das ganze einfacher ist, würde ich falls du bei Windows bleibst auch bei Dev C++ bleiben.
 
ich habe noch ein problem weiß nich ob es nich vlt doch ein denk fehler von mir ist aber ich denke nich und zwar
Code:
int main(int argc, char** argv)
{ 
    if(argc<2)
    {
        cout<<"Usage: sock <hostname oder ip des servers>"<<endl;
        cin.get();
        return 1;
    }
    
    rc=startWinsock();
    if(rc!=0)
    {
        cout<<"Fehler startWinsocks Fehlercode "<<rc<<endl;
        cin.get();
        return 1; 
    }
.....
.....

wenn man hostname oder ip eingeben soll wird ja gar nichts eingelesen und das programm bleibt auch immer an der stelle hängen was ich mal damit getestet habe das ich direkt danach ne messagebox gemacht hab die niie aufgerufen wird.
 
lol ? des is mir schon klar nur wie oben erwähnt ist es aus dem c-worker tutorial und die haben dort nichts eingebaut wo i was eingelesen wird das verwirrt mich und das löst imma noch nich dass problem das das programm nachdem programm punkt abbricht
 
Zurück
Oben