2012-03-14 198 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);