ip-server-frage



  • Hallo

    Der No-IP Dienst sorgt dafür, das die aktuelle dynamische IP mit dem bei No-IP angemeldeten Namen verbunden ist.
    also reicht dann tatsächlich der Name, um zu der IP aufzulösen.

    bis bald
    akari



  • addr.sin_port=htons(x);
    addr.sin_addr.s_addr=inet_addr("x.no-ip.info");

    gibt bei client fehler an...



  • Du musst den Hostnamen erst auflösen. Hier gibt's einen Beispiel Code: http://c-worker.ch/

    Klick auf Codes->WinSOck und dann die hostent.cpp DAtei.

    mfg.



  • rc=getAddrFromString(argv[1],&addr);

    wie wird da argv definiert?

    also da gehört doch der host rein oder?



  • socket++ schrieb:

    rc=getAddrFromString(argv[1],&addr);

    wie wird da argv definiert?

    also da gehört doch der host rein oder?

    Wo wird die Funktion denn benutzt?

    mfg.



  • #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    
    //Prototypen
    int startWinsock(void);
    long getAddrFromString(char* hostnameOrIp, SOCKADDR_IN* addr);
    
    int main(int argc, char** argv)
    {
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
    
      if(argc<2)
      {
        printf("Usage: sock <hostname oder ip des servers>\n");
        return 1;
      }
    
      // Winsock starten
      rc=startWinsock();
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
      else
      {
        printf("Winsock gestartet!\n");
      }
    
      // Socket erstellen
      s=socket(AF_INET,SOCK_STREAM,0);
      if(s==INVALID_SOCKET)
      {
        printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Socket erstellt!\n");
      }
    
      // Verbinden
      memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten
      addr.sin_family=AF_INET;
      addr.sin_port=htons(12345); // wir verwenden mal port 12345
      rc=getAddrFromString(argv[1],&addr);
      if(rc==SOCKET_ERROR)
      {
        printf("IP für %s konnte nicht aufgeloest werden\n", argv[1]);
        return 1;
      }
      else
      {
        printf("IP aufgeloest!\n");
      }
    
      rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR));
      if(rc==SOCKET_ERROR)
      {
        printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError());
        return 1;
      }
      else
      {
        printf("Verbunden mit 127.0.0.1..\n");
      }
    
      // Daten austauschen
      while(rc!=SOCKET_ERROR)
      {
        printf("\nZeichenfolge eingeben [max 256]: ");
        gets(buf);
        send(s,buf,strlen(buf),0);
        rc=recv(s,buf,256,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          break;
        }
        buf[rc]='\0';
        printf("\nServer antwortet: %s\n",buf);
      }
      closesocket(s);
      WSACleanup();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    
    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;
    
      }
    }
    

    da steht dieser code nur wo wird mein hostname definiert?



  • socket++ schrieb:

    da steht dieser code nur wo wird mein hostname definiert?

    Bei diesem Programm wird der hostname als Parameter übergeben. Am besten du verwendest die hostent.cpp.

    mfg.



  • ach das geht natürlich und dann das ergebnis als parameter dem code
    addr.sin_addr.s_addr=inet_addr("x");
    hinzufügen

    aber noch ne letzte frage:

    wie soll ich das übergeben?



  • have jetzt probleme mit den zeilen:

    char hostname[512];
    
      printf("Enter Hostname: "); //x.no-ip.info
      gets(hostname);
    
    rc=dumpHost(hostname);
    

    ich will es automatisch machen lassen ohne eine benutzereingabe
    und dann in die code

    addr.sin_addr.s_addr=inet_addr("hostname");
    

    einfügen...wie würde das aussehen ich bekomms nicht gebacken



  • *weinwein antwortbrauch*



  • socket++ schrieb:

    have jetzt probleme mit den zeilen:

    char hostname[512];
    
      printf("Enter Hostname: "); //x.no-ip.info
      gets(hostname);
    
    rc=dumpHost(hostname);
    

    ich will es automatisch machen lassen ohne eine benutzereingabe
    und dann in die code

    addr.sin_addr.s_addr=inet_addr("hostname");
    

    einfügen...wie würde das aussehen ich bekomms nicht gebacken

    Das hat eigentlich nichts mit Sockets zu tun, sonder gehört zu C. Deine Probleme solltest du ganz einfach selber lösen können, anscheinend fehlen dir Grundkenntnisse in C. Arbeite ein Tutorial zu C durch, z.B. dieses:
    http://www.pronix.de/pronix-4.html

    mfg.



  • ich brauche kein totorial..

    aber wenn ich hostname so definiere ist das ja falsch:

    hostname = x

    ergebnis der auflösung wäre dann zb y

    addr.sin_addr.s_addr=inet_addr(y);

    das geht ja mal keinen meter...

    und wenn ich

    char hostname[x];

    sage hab ich das prob auch nicht wech



  • socket++ schrieb:

    ich brauche kein totorial..

    Doch definitiv!



  • ach komm totorials sind blöd



  • socket++ schrieb:

    ach komm totorials sind blöd

    Jemanden helfen der keine Ahnung von C hat ist auch blöd.

    mfg.



  • komm wenn du das tot macht mach ich es auch



  • socket++ schrieb:

    komm wenn du das tot macht mach ich es auch

    geh aber du das leben können ich auch fliegen

    mfg.



  • ok du darfst ein s dazutun...



  • socket++ schrieb:

    ok du darfst ein s dazutun...

    Wozu? Sorry ich hab deinen Satz echt nicht verstanden.

    mfg.



  • tot=totorial

    komm wenn du das tot mach\"s\"t mach ich es auch

    tut mir leid 🙄

    aber komm schon wie kann ich char hostname[512]; direkt meinen no-ip-acc zuweisen?


Anmelden zum Antworten