2012-11-25 137 views
0

我试图建立一个客户端 - >代理服务器 - >服务器应用程序。C linux代理服务器

我需要代理服务器的帮助,我该如何使数据发送到server现在它只能与客户端进行通信。

这是我的codef或proxy server,我从一个例子中修改了它。我是新来的。

int main(int argc, char *argv[]) 
{ 
    int sockfd, newsockfd, portno, pid; 
    socklen_t clilen; 
    struct sockaddr_in serv_addr, cli_addr; 

    if (argc < 2) { 
     fprintf(stderr,"ERROR, no port provided\n"); 
     exit(1); 
    } 
    sockfd = socket(AF_INET, SOCK_STREAM, 0); 
    if (sockfd < 0) 
     error("ERROR opening socket"); 
    bzero((char *) &serv_addr, sizeof(serv_addr)); 
    portno = atoi(argv[1]); 
    serv_addr.sin_family = AF_INET; 
    serv_addr.sin_addr.s_addr = INADDR_ANY; 
    serv_addr.sin_port = htons(portno); 
    if (bind(sockfd, (struct sockaddr *) &serv_addr, 
       sizeof(serv_addr)) < 0) 
       error("ERROR on binding"); 
    listen(sockfd,5); 
    clilen = sizeof(cli_addr); 
    while (1) { 
     newsockfd = accept(sockfd, 
       (struct sockaddr *) &cli_addr, &clilen); 
     if (newsockfd < 0) 
      error("ERROR on accept"); 
     pid = fork(); 
     if (pid < 0) 
      error("ERROR on fork"); 
     if (pid == 0) { 
      close(sockfd); 
      dostuff(newsockfd); 
      exit(0); 
     } 
     else close(newsockfd); 
    } /* end of while */ 
    close(sockfd); 
    return 0; /* we never get here */ 
} 

/******** DOSTUFF() ********************* 
There is a separate instance of this function 
for each connection. It handles all communication 
once a connnection has been established. 
*****************************************/ 
void dostuff (int sock) 
{ 
    int n, p; 
    char buffer[256]; 
    char request; 
    FILE *file; 
    file = fopen("process.log","a+"); 

    do 
    { 
     //here the proxy server receives data from the client 
    bzero(buffer,256); 
    p = read(sock,buffer,255); 
    if (n < 0) error("ERROR reading from socket"); 

    printf("num: %s\n",buffer); 

     //here the proxy servers replies to the client. 
    n = write(sock,buffer,sizeof(buffer)); 

     //here the process should send data to the server 
     //...codes i need help with...   

    if (n < 0) error("ERROR writing to socket"); 
    fprintf(file,"%s\n",buffer); /*writes*/ 

    }while(p != 0); //this runs the process +1 more than it should. wonder why? 

    fclose(file); 
} 

DoStuff()....你也可以检查我添加的评论。 当客户端连接到服务器时,如何向客户端发送消息,如欢迎客户端消息? :)

注意:代理服务器发送GET请求到HTTP 1.1服务器。

我真的很感激它。谢谢:)

回答

1

要连接到服务器,你将不得不打电话socket,然后connect从代理服务器连接到您的真实服务器的套接字。看到这里第5节:

http://beej.us/guide/bgnet/output/html/singlepage/bgnet.html

此外,检查p代替n 4线到您do-while循环中DoStuff()

+0

我只是不能制定的代码,我可以看到代理服务器的示例代码?或者位于客户端和真实服务器之间的服务器? – user1553142

+0

按照说明从客户端连接到服务器,以便实现您在上面遇到问题的部分。在代理回调的顶部,您将创建一个新的套接字并将其连接到您的真实服务器,然后使用该套接字进行写入。尝试一下,如果你有问题,请使用更新后的代码回到我们。你能行的!使用我给你的两个函数,这实际上就是它的全部。 – rutgersmike