ip-server-frage



  • socket++ schrieb:

    char hostname["xenchat.no-ip.info"];

    hat die folge:

    size of array `hostname' has non-integer type

    string geht ja auch nicht

    ..................................

    addr.sin_addr.s_addr=inet_addr(x); // zielrechner ist unser eigener

    const char x[127.0.0.1];
    too many decimal points in number

    string x = "127.0.0.1";
    cannot convert `std::string' to `const char*' for argument `1' to `long unsigned int inet_addr(const char*)'

    Um einen String in einen const char* umzuwandeln musst du die Elementfunktion .c_str() aufrufen.

    Anscheinend hast du Arrays und C-Strings noch nicht verstanden. Ich empfehle dir dringend in ein TUtorial reinzuschauen.

    mfg.



  • k eine letzte frage noch...

    string hostname;
    hostname = "x.no-ip.info";

    rc=dumpHost(hostname.c_str());

    würde das gehen?



  • hat sic hschon erledigt freund hat es mir erklärt...der hat mir auch den account gegeben 😉



  • ich habe jetzt also alles richtig gemacht:

    string b = inet_ntoa(addra);
    
    addr.sin_addr.s_addr=inet_addr(b.c_str());
    

    jetzt kompiliert er das programm, aber er bleibt nachder ausgabe von

    printf("Host Ip Address: %s\n",inet_ntoa(addra));
    

    stehen

    was kann der fehler sein?



  • aja wenn ich hier:

    addr.sin_addr.s_addr=inet_addr(b.c_str());

    anstatt b.c_str()

    eine ip angebe funktioniert es



  • Schick mal dein gesamtes Programm, so versteh ich dein Problem nicht.

    mfg.



  • is das den nnötig will doch nur wissen woran das liegen kann

    bei einer variablen in diesem feld...

    addr.sin_addr.s_addr=inet_addr(b.c_str());

    ..compiliert er es und er bleibt nach der ausgabe der hostent ergebnisse stehen

    wenn ich jedoch eine ip angebe connectet er einwandfrei...

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



  • socket++ schrieb:

    is das den nnötig will doch nur wissen woran das liegen kann

    bei einer variablen in diesem feld...

    addr.sin_addr.s_addr=inet_addr(b.c_str());

    ..compiliert er es und er bleibt nach der ausgabe der hostent ergebnisse stehen

    wenn ich jedoch eine ip angebe connectet er einwandfrei...

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

    Setzte davor mal ein

    std::cout << b;
    

    Um zu gucken was in dem b String ist.

    mfg.



  • habe ich schön längst gemacht er gibt eine ip aus...



  • socket++ schrieb:

    habe ich schön längst gemacht er gibt eine ip aus...

    dann müsste es funktionieren und ich kann dir noch helfen wenn du mir deinen code schickst, oder ein compilierbares beispiel.

    mfg.



  • haste irgendeinen messenger oder was auch immer?



  • socket++ schrieb:

    haste irgendeinen messenger oder was auch immer?

    ja skype. Aber rate mal wozu dieses Forum hier gut ist?

    mfg.



  • warte ich muss das gute stück noch kurz bearbeiten...



  • #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    int startWinsock(void);
    
    int main()
    {  
      long dumpHost(char* hostname);
      string hostname;
      hostname = "x";
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
    
      rc=startWinsock();
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
    
      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;
      }
    
      char* a = "x";
    
      IN_ADDR addra;
      HOSTENT* he;
    
      he=gethostbyname(a);
    
       // ip adress list
      i=0;
    
      while(he->h_addr_list[i])  {
      addra.s_addr=*((long*)he->h_addr_list[i++]);
      printf("Host Ip Address: %s\n",inet_ntoa(addra));
      break;
      }
      string b = inet_ntoa(addra);
    
      memset(&addr,0,sizeof(SOCKADDR_IN));
      addr.sin_family=AF_INET;
      addr.sin_port=htons(12345); 
      addr.sin_addr.s_addr=inet_addr(x); //das geht nicht
      addr.sin_addr.s_addr=inet_addr("127.0.0.1"); //das funktioniert
    
      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");
      }
    
      while(rc!=SOCKET_ERROR)
      {
        printf("\nZeichenfolge eingeben [max 256]\n\n ");
        printf("say:");
        gets(buf);
        send(s,buf,strlen(buf),0);
        rc=recv(s,buf,256,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          Sleep(5000);
          cout << "\r";
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          Sleep(5000);
          cout << "\r";
          break;
        }
        buf[rc]='\0';
        char antwort[300];
        printf("\nServer antwortet: %s\n",antwort);
      }
      closesocket(s);
      WSACleanup();
      return 0;
    }
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    


  • tut mir leid junger, dein code lässt sich bei mir nicht compilieren. bisst du sicher dass dein Code wirklich genau so ist? Welchen Compiler hast du?

    mfg.



  • den hab ich mit dev gemacht...



  • socket++ schrieb:

    den hab ich mit dev gemacht...

    Ja das habe ich auch, aber bei mir geht es nicht. Kann es auch gar nicht, z.B. ist i und x undefiniert.

    mfg.



  • #include <windows.h>
    #include <winsock2.h>
    #include <stdio.h>
    #include <iostream>
    using namespace std;
    
    int startWinsock(void);
    
    int main()
    {  
      long dumpHost(char* hostname);
      string hostname;
      hostname = "x";
      long rc;
      SOCKET s;
      SOCKADDR_IN addr;
      char buf[256];
    
      rc=startWinsock();
      if(rc!=0)
      {
        printf("Fehler: startWinsock, fehler code: %d\n",rc);
        return 1;
      }
    
      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;
      }
    
      char* a = "x";
    
      IN_ADDR addra;
      HOSTENT* he;
    
      he=gethostbyname(a);
    
       // ip adress list
       int i;
      i=0;
    
      while(he->h_addr_list[i])  {
      addra.s_addr=*((long*)he->h_addr_list[i++]);
      printf("Host Ip Address: %s\n",inet_ntoa(addra));
      break;
      }
      string b = inet_ntoa(addra);
    
      memset(&addr,0,sizeof(SOCKADDR_IN));
      addr.sin_family=AF_INET;
      addr.sin_port=htons(12345); 
      addr.sin_addr.s_addr=inet_addr(b.c_str()); //das geht nicht
    /*
      addr.sin_addr.s_addr=inet_addr("127.0.0.1"); //das funktioniert
    */
      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");
      }
    
      while(rc!=SOCKET_ERROR)
      {
        printf("\nZeichenfolge eingeben [max 256]\n\n ");
        printf("say:");
        gets(buf);
        send(s,buf,strlen(buf),0);
        rc=recv(s,buf,256,0);
        if(rc==0)
        {
          printf("Server hat die Verbindung getrennt..\n");
          Sleep(5000);
          cout << "\r";
          break;
        }
        if(rc==SOCKET_ERROR)
        {
          printf("Fehler: recv, fehler code: %d\n",WSAGetLastError());
          Sleep(5000);
          cout << "\r";
          break;
        }
        buf[rc]='\0';
        char antwort[300];
        printf("\nServer antwortet: %s\n",antwort);
      }
      closesocket(s);
      WSACleanup();
      return 0;
    }
    
    int startWinsock(void)
    {
      WSADATA wsa;
      return WSAStartup(MAKEWORD(2,0),&wsa);
    }
    

    so funktioniert er bei mir...

    hab bisschen was geändert



  • Ich gebe dir mal einen gut gemeinten Rat: Hör auf mit Sockets, lern erstmal C!

    Wie ist deine Seite bei no-ip.info?? "x"??? Denn das übergibst du an gethostbyname!

    mfg.



  • O man das ist mir bewusst...aber ich öffne doch nicht für dich einen port ...


Anmelden zum Antworten