Mit Server verbinden



  • was ist das für ein server ?

    es gibt chat server auf java bassis (die sich dann auf udp und tcp aufteillen) das sind 99%

    wenn du aber auf einen existierenden chatserver zugreifen willst ... viel spass da kann der Programierer das protokol, diesmal nicht TCP/UDP sondern "codewörter", selbst ausgedacht haben (wenn du die nicht kennst ist es schon schwirig -> mit ethereal lässt sich sowas aber herausfinden, ausser es ist verschlüsselt)

    am besten ist du beschaffst dir den java code ... wenn du das nötigste von c++ kannst sollte es möglich sein es um zuschreiben und deine eigene gui drüber zu ziehen ...

    wenn du aber nur ein test machen willst ... dann nimm nen ftp server da ist das noch am einfachsten (zumindest einloggen etc)



  • Ok habe ne möglichkeit gefunden und auch den Code zu zusammen gecodet jetzt kommt aber beim Complieren folgende Meldung:
    main.o(.text+0x85):main.c: undefined reference to WSAStartup@8' main.o(.text+0xcc):main.c: undefined reference tosocket@12'
    main.o(.text+0x11d):main.c: undefined reference to htons@4' main.o(.text+0x12f):main.c: undefined reference toinet_addr@4'
    main.o(.text+0x146):main.c: undefined reference to gethostbyname@4' main.o(.text+0x1a9):main.c: undefined reference toconnect@12'
    main.o(.text+0x21c):main.c: undefined reference to send@16' main.o(.text+0x26b):main.c: undefined reference torecv@16'
    main.o(.text+0x2d8):main.c: undefined reference to closesocket@4' main.o(.text+0x2e0):main.c: undefined reference toWSACleanup@0'
    collect2: ld returned 1 exit status



  • Hast vergessen gegen die lib zu linken.

    Visual Studio
    #pragma comment(lib,"ws2_32.lib");

    bei DevC++ über Projekt--> Projektoptionen --> Parameter --> Linker



  • Und was muss ich dann bei Dev C++ da eingeben



  • Schau mal in "Compiler- und IDE Forum" da gibt es ungefähr 20 solcher Fragen...



  • Habe nix gefunden



  • Hey, auf meiner Homepage habe ich dazu ein Tutorial veröffentlicht. Wenn du soweit bist, musst du die Library "libws2_32.a" dazulinken.

    MfG mikey.



  • Drift schrieb:

    Habe nix gefunden

    Sowas macht aggressiv.



  • Danke Mikey habe es hinbekommen



  • Nichts zu danken 🙂



  • So habe folgenden Code im Inet gefunden da mein code nicht ging:

    #include <stdio.h>
    #include <errno.h>
    #include <string.h>
    #pragma comment(lib,"ws2_32.lib");
    /* Windows-System */
    #ifdef _WIN32
    #include <winsock.h>
    #include <io.h>
    /* Unix-System */
    #else
    #include <sys/socket.h>
    #include <sys/types.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>
    #include <netdb.h>
    #include <unistd.h>
    #endif
    #define HTTP_PORT 80
    int main(int argc, char **argv)
    {
    int sock;
    struct sockaddr_in host_addr;
    struct hostent *hostinfo;
    char *host, *file;
    char command[1024];
    char buf[1024];
    unsigned int bytes_sent, bytes_recv;
    /* Ist der Aufruf korrekt? */
    if (argc != 3) {
    fprintf (stderr, "Aufruf: httprecv host file\n");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    host = argv[1];
    file = argv[2];
    /* ggf. Winsock initialisieren */
    
    #ifdef _WIN32
    WSADATA wsaData;
    if (WSAStartup (MAKEWORD(1, 1), &wsaData) != 0) {
    fprintf (stderr, "WSAStartup(): Kann Winsock nicht initialisieren.\n");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    #endif
    /* Socket erzeugen */
    sock = socket (AF_INET, SOCK_STREAM, 0);
    if (sock == -1) {
    perror ("socket()");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    /* Adresse des Servers festlegen */
    memset( &host_addr, 0, sizeof (host_addr));
    host_addr.sin_family = AF_INET;
    host_addr.sin_port = htons (HTTP_PORT);
    host_addr.sin_addr.s_addr = inet_addr (host);
    if (host_addr.sin_addr.s_addr == INADDR_NONE) {
    /* Server wurde nicht mit IP sondern mit dem Namen angegeben */
    hostinfo = gethostbyname (host);
    if (hostinfo == NULL) {
    perror ("gethostbyname()");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    memcpy((char*) &host_addr.sin_addr.s_addr, hostinfo->h_addr, hostinfo->h_length);
    }
    /* Verbindung aufbauen */
    if (connect(sock, (struct sockaddr *) &host_addr, sizeof(struct sockaddr)) == -1) {
    perror ("connect()");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    /* HTTP-GET-Befehl erzeugen */
    sprintf (command, "GET %s HTTP/1.0\nHost: %s\n\n", file, host);
    /* Befehl senden */
    bytes_sent = send (sock, command, strlen (command), 0);
    if (bytes_sent == -1) {
    perror ("send()");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    // Antwort des Servers empfangen und ausgeben */
    while ((bytes_recv = recv (sock, buf, sizeof(buf), 0)) > 0) {
    write (1, buf, bytes_recv);
    }
    if (bytes_recv == -1) {
    perror ("recv()");
    system ("PAUSE");
    exit (EXIT_FAILURE);
    }
    printf ("\n");
    #ifdef _WIN32
    closesocket(sock);
    WSACleanup();
    #else
    close(sock);
    #endif
    system ("PAUSE");
    return 0;
    }
    

    So wo muss ich jetzt angeben mit welcher Server IP Verbunden werden soll?



  • Das passiert hier bei

    /* Adresse des Servers festlegen */
    

    Dem Code nach steht in "host" entweder IP oder hostname.

    ...ob das Source-übernehmen dich weiterbringt bezweifle ich mal 😉



  • Und wie musste ich des machen das mit folgender IP verbunden wird "213.61.5.148"



  • Hint:

    fprintf (stderr, "Aufruf: httprecv host file\n");
    


  • Für den Anfang würd ichs nur für Windows schreiben also die #if Unix dinger da weg. Ist es so ein online Chat? oder ein Chat Server wie z.B.: ein IRC-Server ?? Wenns sowas wie IRC ist dann ist es nicht der 80 Port sondern ein anderer und die HTTP sachen kannst dann weg lassen. Erkundig dich amal was für ein Server das ist und welches Protokoll er "spricht"

    MFG Pacino



  • Das ist ein Java Server, Windows 2003.
    Es ist der Server chat.knuddels.de:2710
    Aber was für ein Protokoll er benutzt weiß ich nicht!

    Muss ich als Port 2710 angeben?



  • Drift schrieb:

    Muss ich als Port 2710 angeben?

    Du musst garnix 😃
    (aber probiers mal wenn du willst dass es auch funktioniert)



  • mhmm nimm den port 2710 und schau mal was da der server beim connecten zurück gibt.
    Wennst Glück hast sagt er dir das er den benutzernamen haben will und dann das passwort. Sonst musst umadum probieren.

    MFG Pacino



  • Nur so ne Frage am Rande was willst du aus nem Webchat holen?
    Ich glaub eher es gehen nur HTTP-Requests und FTP wobei FTP wird da keiner den zugriff erlauben. Der Rest wird geblockt sein.

    MFG Pacino



  • Kürzlich wurde von mir übrigens ein Tutorial zum Thema Libraries in Dev-C++ linken in die FAQ's geschoben, also künftig bei solchen Fragen bitte darauf verweisen ! 🙂

    MfG mikey.


Anmelden zum Antworten