Mit Server verbinden



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



  • Ok habe jetzt alles über den Server rausgekriegt.
    Fedora (Unix/Linux) Server mit Apache/2.0.53 (Laut Header)
    Chatclient: Java
    Chatserver: Java
    Protokoll: Socket (TCP/IP)

    Was für Zeilen kann ich jetzt entfernen?



  • TCP/IP war naheliegend 😉
    Was du eher brauchst ist das Protokoll für den Chatserver.
    Quasi Informationen welche Befehle du dem Chatserver senden kannst, welche der Server dem Client sendet. Wie die Kommunikation abläuft.

    Nen SMTP-Mailserver z.B. sagt nach dem verbinden erstmal sowas in der Art "220 Tach ich bin Mailserver XYZ"
    Woraufhin der Mailclient ihm dann sowas sendet: "HELO MeinHostna.me"
    Der Server sagt daraufhin: "250 Hi MeinHostna.me - Was kann ich für dich tun?"
    Und so weiter und sofort.

    Ohne Kenntnisse wie du mit dem Chat-Server kommunizieren kannst wird dir ne Verbindung zum Chat-Server nicht viel nützen. Sofern man das Protokoll dadurch nich t evtl. halbwegs erraten kann (Frickel-Lösung ;/)

    (Nen Standard IRC-Server scheint es nicht zu sein. Dafür hättest du die Protokoll-Doku hier gefunden: http://tools.ietf.org/html/rfc1459 )



  • ich weis ja nicht ob es euch klar ist, aber

    1. Knuddels.de ist nicht Open Source
    2. steht dort irgendwo was von wegen nur original client verwenden
    3. iss das doch nur wieder ein fruchtloser versuch knuddels zu hacken oder anderweitig zu manipulieren
    4. findet man das komunikationsprotokoll im internet wie so ziemlich alles wenn man einfach nur sucht , also verschone dieses forum bitte mit derartigen "illegalitäten"


Anmelden zum Antworten