KEINE TUTORIALS!

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • KEINE TUTORIALS!

    Ich bin schon am Verzweifeln!!!
    Ich weiß einfach nicht, wie ich eine verfluchte Socketverbindung
    programmiere mit meinem C++ Compiler, ich habe schon
    alles mögliche versucht, mein Complie startet noch nciht
    einmal eine meiner Versuche!!!

    Quellcode

    1. #include <iostream>
    2. #include <string>
    3. #include <winsock.h>
    4. using namespace std;
    5. int main () {
    6. /* initialize windows sockets */
    7. {
    8. WSADATA wsa;
    9. if (WSAStartup(MAKEWORD(1, 1), &wsa))
    10. {
    11. printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
    12. return EXIT_FAILURE;
    13. }
    14. }
    15. int Endblinker;
    16. cin >> Endblinker;
    17. }
    Alles anzeigen


    In einem Tutorial lese ich

    Unter Windows muss die Header-Datei winsock.h eingebunden werden, sowie beim Compilerlauf die Bilbiothek wsock32.lib. Ausserdem müssen die Sockets (und das ist wichtig, weil sonst absolut nichts geht - ich werde im Folgenden auch nicht mehr darauf hinweisen, da es eine Windows-Spezialität ist und bei Unix nicht nötig ist) "angeschaltet" werden. Dies erledigt WSAStartup(). Am einfachsten macht man dies, indem man den folgenden Codeausschnitt einfügt:


    /* initialize windows sockets */
    {
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(1, 1), &wsa))
    {
    printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
    return EXIT_FAILURE;
    }
    }

    wobei dies am Günstigsten gleich zu Beginn in main() erledigt wird, bevor es noch vergessen geht. Ausserdem verwendet Windows den Typ SOCKET statt int für Sockets sowie SOCKET_ERROR statt -1 bei Fehlern von socket(). Dies ist jedoch nur der Form halber, da int auch funktioniert ;)


    da suche ich stundenlang nach einer wsock32.lib zum Downloaden und
    find erein garnichts, mein Compliler kennt es auch nicht, also muss
    sie mir ja fehlen.. aber nichts nirgends!

    und kein einziges Winsock Tutorial für C++ zeigt einen
    Gesamtcode wie es so aussehen soll, das mal teils
    im text steht was in den ganzen Code als nächste Stelle
    gehört, dann wieder ein Codeteil in einem Codeblock
    und nirgendwo ein Gesamtcode, wie es dann aussieht.

    "Zotteljedi" schrieb:

    Apropos Header: unter Windows reicht es im Allgemeinen winsock.h einzubinden, aber unter UNIX hat man den Kram auf einige Header verteilt.


    Ein anderes Tutorial wiederum sagt mir wsock32.lib muss
    auch noch eingebunden werden.

    Quellcode

    1. /* initialize windows sockets */
    2. {
    3. WSADATA wsa;
    4. if (WSAStartup(MAKEWORD(1, 1), &wsa))
    5. {
    6. printf("WSAStartup() failed, %lu\n", (unsigned long)GetLastError());
    7. return EXIT_FAILURE;
    8. }
    9. }


    Gibt es printf() auch für C++? Also bei mir gehts nicht,
    einen header für sie bekam icha uch nirgends genannt.
    Nach Einsatz dieses Codes am Anfang in main();
    wird das Programm nichmal gestartet, leigt es
    daran, dass ich diese typischen DOS-Fenster
    programmiere?

    Kann ich mir nirgendwo anschauen, wie so ein ganzes
    Skript aussieht???

    c++ socket demoskript


    Danah findet google allerhöchstens nen
    Currywurststand in Berlin!

    Edit

    Zotteljedi hat Demoskripte, aber nicht ein einziger
    wird von meinem Compiler akzeptiert, überall
    Fenhler in irgendwelchen Zeilen.
  • Ein Beispielskript von Zotteljedi

    Quellcode

    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #include <string.h>
    4. #include <sys/types.h>
    5. #include <sys/socket.h>
    6. #include <netinet/in.h>
    7. #include <arpa/inet.h>
    8. #include <unistd.h>
    9. #include <netdb.h>
    10. #define BUF_SIZ 4096
    11. int send_request(const int sock, const char *hostname)
    12. {
    13. char request[BUF_SIZ];
    14. snprintf(request, sizeof(request), "GET / HTTP/1.1\r\n"
    15. "Host: %s\r\n"
    16. "Connection: Close\r\n\r\n", hostname);
    17. if (send(sock, request, strlen(request), 0) == -1)
    18. {
    19. perror("send() failed");
    20. return 1;
    21. }
    22. return 0;
    23. }
    24. int view_response(const int sock)
    25. {
    26. char response[BUF_SIZ];
    27. int bytes;
    28. while((bytes = recv(sock, response, sizeof(response), 0)) > 0)
    29. fwrite(response, 1, bytes, stdout);
    30. if (bytes < 0)
    31. {
    32. perror("recv() failed");
    33. return 1;
    34. }
    35. return 0;
    36. }
    37. int main(int argc, char *argv[])
    38. {
    39. struct hostent *host;
    40. struct sockaddr_in addr;
    41. int s;
    42. if (argc < 2)
    43. {
    44. fprintf(stderr, "usage: %s <host>\n", argv[0]);
    45. return 1;
    46. }
    47. if (!inet_aton(argv[1], &addr.sin_addr))
    48. {
    49. host = gethostbyname(argv[1]);
    50. if (!host)
    51. {
    52. herror("gethostbyname() failed");
    53. return 2;
    54. }
    55. addr.sin_addr = *(struct in_addr*)host->h_addr;
    56. }
    57. s = socket(PF_INET, SOCK_STREAM, 0);
    58. if (s == -1)
    59. {
    60. perror("socket() failed");
    61. return 3;
    62. }
    63. printf("connecting to %s:80...", inet_ntoa(addr.sin_addr));
    64. fflush(stdout);
    65. addr.sin_port = htons(80);
    66. addr.sin_family = AF_INET;
    67. if (connect(s, (struct sockaddr*)&addr, sizeof(addr)) == -1)
    68. {
    69. perror("connect() failed");
    70. return 4;
    71. }
    72. puts("ok.");
    73. if (send_request(s, argv[1]))
    74. return 5;
    75. if (view_response(s))
    76. return 6;
    77. close(s);
    78. return 0;
    79. }
    Alles anzeigen


    undeclared send, first time use this function.

    Ok, das liegt daran, dass nicht einer der headerfiles gefunden
    wurde, aber natürlich kann mir auch kein Schwein sagen, wo
    ich die herbekomme.
  • Hallo nick3...du kannst nicht erwarten, dass dir immer jemand innerhalb von einer halben Stunde (19:09 -> 19:36 ~ 0,5h) antwortet.

    Hast du denn auch schon mal google oder eine andere Suchmaschine benutzt und mal selbst versucht, nach "headerfiles" (lol) zu suchen?

    Wenn du mal Programmierer werden möchtest, dann ist auch sehr viel eigeninitiative gefragt. Weil solche, wie dich, gibt es viele und werden es so NIE schaffen.
  • Ich würde mal ganz stark behaupten du bindest die falschen Libaries ein.
    nciht wsock32.lib ist die erforderliche Libary sondern ws_32.lib....

    Außerdem musst du das folgendermaßen einbinden falls du kein VS C++ hast:
    (hab in deinem Code kein prgma coment gefunden,was mcih stutzig machte)

    Quellcode

    1. #pragma coment(lib,"ws_32.lib")


    Da liegt der Fehler denke ich.Send() is dort deklaiert.
    Habs mal bei mir ausprobiert udn bei mir funz alles problemlos.
    Wie gesagt es gibt glaube ich keine winsock32.lib die gesuchte Libary is ws_32.lib.
    Wäre vllt. auch ganz nett wenn du mal dazu sagen würdest welches Betriebssystem du nutzt...


    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • Es ging für ihn darum, dass er nicht wusste (weiss?) wie er mit dem Dev-C++ gegen ne winsock lib linken kann.
    Da sich das Thema splittet mach ich ma nen Link zum anderen Thread:
    http://www.easy-coding.de/socket-tutorial-extra-fuer-cpp-t1676.html
    aber vielleicht hat ers ja aufgegeben und das Forum verlassen.
    Der Beispielcode vom Zotteljedi ist übrigens für Linux.
  • "newb" schrieb:

    Es ging für ihn darum, dass er nicht wusste (weiss?) wie er mit dem Dev-C++ gegen ne winsock lib linken kann.
    Da sich das Thema splittet mach ich ma nen Link zum anderen Thread:
    http://www.easy-coding.de/socket-tutorial-extra-fuer-cpp-t1676.html
    aber vielleicht hat ers ja aufgegeben und das Forum verlassen.
    Der Beispielcode vom Zotteljedi ist übrigens für Linux.


    Joa scheint so......
    Weiß aj ncih ob bei Linux das ding wsock.lib heißt....
    Daher sagte ich ja es wäre ganz nett wenn man immer dazu sagt welches Betriebssystem man hat....
    Ich persönlcih kenne mcih nur mit windoof aus^^

    MfG Ska
    "A Programmer is just a tool which converts cofein into code!"
    (anonymer Verfasser)
    [Blockierte Grafik: http://www.beepworld.de/memberdateien/members98/skabus/sigc.jpg]
  • "Skabus" schrieb:

    Außerdem musst du das folgendermaßen einbinden falls du kein VS C++ hast:
    (hab in deinem Code kein prgma coment gefunden,was mcih stutzig machte)

    Quellcode

    1. #pragma coment(lib,"ws_32.lib")



    Das ist vom Compiler Hersteller abhängig, und nicht jeder unterstützt das.
    Du kannst bei VC auf der Kommandozeile nach "-link" soviele Libs angeben wie du willst. GCC braucht ein "-l" Parameter etc.
    Ich persönlich rate aus Portabilitätsgründen von "#pragma comment" ab!
  • aber vielleicht hat ers ja aufgegeben und das Forum verlassen.
    Der Beispielcode vom Zotteljedi ist übrigens für Linux.


    Nein, tut mir leid.
    Ich war ziemlich frustriert, aber ich geb es nicht auf!

    Tut mir leid für das Theater, das ich hier veranstaltet habe
    und danke, das ihr weiterhin versucht habt, mir zu helfen!
    Aber ich lern jetzt echt mal erst die Grundlagen, hocke
    grade vor Objektorientierung 1
    (erinnert mich sehr an javascript)

    Und nochmals entschuldigung...