Mit Server verbinden



  • Wie kann ich mich mit einem Server verbinden z.B einloggen???



  • Die Frage ist etwas zu wage... meinst Du Telnet!? oder Netzlaufwerk-verbinden!?



  • Ich meine einen Online gestellten Server,an den man Daten senden kann,z.B Benutzername und so weiter



  • Haengt natuerlich davon ab, was das fuer ein Server ist. Grundsaetzlich aber ueber Sockets.



  • Es ist ein ChatServer



  • Und über welches Protokoll willst du das machen?

    Auf jeden Fall mal über einen SOCKET verbinden und die Kommunikation ist protokollabhänging.

    MFG Pacino



  • Verbinden: mittels connect().
    Beim "einloggen" wirds dann schwieriger 😃



  • wennst mal sagst welches Protokoll dann kann man dir helfen.



  • 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 😉


Anmelden zum Antworten