Proxy - Browser Problem



  • Hallo,

    Bei dem Versuch eine art Proxy Server in C zu coden, stellt sich bei mir ein kleines Problem auf. Folgendes: der Server lauscht lokal auf Port 8080, waerend der client der Browser ist. Wenn ich nun mit dem Browser ein GET request z.b auf http://www.google.com ausführe, empfaengt der Server die Seite bzw. speichert sie in einen "Buffer". Anschließend soll er die zuvor empfangene Seite wieder zurück schicken und diese im Browser öffnen/anzeigen. Also stelle ich mit connect() eine Verbindung zu google her und schicke den "Buffer" mit send() wieder zurück auf Port 80. Nur zeigt er mir im Browser keine Seite an. Woran könnte das liegen?

    Danke



  • hugh schrieb:

    [..] Anschließend soll er die zuvor empfangene Seite wieder zurück schicken und diese im Browser öffnen/anzeigen. Also stelle ich mit connect() eine Verbindung zu google her und schicke den "Buffer" mit send() wieder zurück auf Port 80. Nur zeigt er mir im Browser keine Seite an. Woran könnte das liegen?

    Danke

    Was schickst du an Port 80 zurück?? Du musst das was du von Google bekommst über den gleichen Socket zurückschicken der die Verbindung hergestellt hat, also wieder an den Browser. Nixda mit Port80 zurückschicken 😉



  • Ja, so hatte ich das am anfang auch, nur zeigte er mir im Browser dann nur eine leere Seite und das hat mich stutzig gemacht. Hier ein Code Ausschnitt:

    [cpp]
    server.sin_family = AF_INET;
    server.sin_port = htons(8080);
    server.sin_addr.s_addr = inet_addr("127.0.0.1");

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval));
    bind(sockfd, (struct sockaddr*)&server, sizeof(server));
    listen(sockfd, 1);

    ...

    newfd = accept(sockfd, (struct sockaddr*)&client, &client_size);
    printf("Incoming connection from %s on port %d\n",
    inet_ntoa(client.sin_addr.s_addr), htons(client.sin_port));

    bytes = recv(newfd, recv_buffer, strlen(recv_buffer) - 1, 0);
    recv_buffer[bytes] = '\0';

    printf("Receive request...\n");
    printf("%s\n", recv_buffer);

    send(newfd, recv_buffer, strlen(recv_buffer), 0);
    ...
    [cpp]


Anmelden zum Antworten