2012-03-14 257 views
0

我正在爲C寫一個基本的代理服務器。gethostbyname,連接到互聯網?

我使用firefox進行測試,並且我已經讓服務器成功接收瀏覽器的請求。

但現在我需要把它們發送到互聯網,以獲得瀏覽器想要的網頁,我猶豫不決。

這是我現在的連接代碼。

我不知道,如果8080端口是正確的,我不知道要放什麼東西了「的gethostbyname」。 這是我希望得到一些建議的部分。

int sock = socket(PF_INET, SOCK_STREAM, 0); 

    if (sock < 0) 
    { 
    perror("socket() failed"); 
    return EXIT_FAILURE; 
    } 

    struct sockaddr_in server; 
    struct hostent * hp; 

    server.sin_family = PF_INET; 
    hp = gethostbyname("localhost"); 
    if (hp == NULL) 
    { 
    perror("Unknown host"); 
    return EXIT_FAILURE; 
    } 

    bcopy((char *)hp->h_addr, (char *)&server.sin_addr, hp->h_length); 
    int port = 8080; 
    server.sin_port = htons(port); 

    if (connect(sock, (struct sockaddr *)&server, sizeof(server)) < 0) 
    { 
    perror("connect() failed"); 
    return EXIT_FAILURE; 
    } 
+0

回答我自己question- - >端口應該是80.在瀏覽器請求中可以找到主機名,例如如果你想要http://www.cs.mit.edu/answers.txt,你的主機名是www.cs.mit.edu – Aerovistae 2012-03-14 20:26:27

回答

2

這整個的gethostbyname,複製周圍(HA - 即使是過於老BCOPY)...只是使用getaddrinfo(檢測代碼廣泛的錯誤進行了簡潔):

int ret = getaddrinfo("localhost", "80" /* (or 8080, whichever applies) */, NULL, &res); 
if (ret == 0) { 
    const struct addrinfo *r; 
    for (r = res; r != NULL || ret != 0; r = r->ai_next) 
     ret = connect(fd, res->ai_addr, res->ai_addrlen); 
} 
freeaddrinfo(res);