C代码,简单的Web服务器(代码OK)

时间:2014-10-01 12:21:25

标签: c linux networking web

我的网络服务器代码存在问题

#include<netinet/in.h>    
#include<stdio.h>    
#include<stdlib.h>    
#include<sys/socket.h>    
#include<sys/stat.h>    
#include<sys/types.h>    
#include<unistd.h>    

int main() {    
   int create_socket, new_socket;    
   socklen_t addrlen;    
   int bufsize = 1024;    
   char *buffer = malloc(bufsize);    
   struct sockaddr_in address;    

   if ((create_socket = socket(AF_INET, SOCK_STREAM, 0)) > 0){    
      printf("The socket was created\n");
   }

   address.sin_family = AF_INET;    
   address.sin_addr.s_addr = INADDR_ANY;    
   address.sin_port = htons(15000);    

   if (bind(create_socket, (struct sockaddr *) &address, sizeof(address)) == 0){    
      printf("Binding Socket\n");
   }


   while (1) {    
      if (listen(create_socket, 10) < 0) {    
         perror("server: listen");    
         exit(1);    
      }    

      if ((new_socket = accept(create_socket, (struct sockaddr *) &address, &addrlen)) < 0) {    
         perror("server: accept");    
         exit(1);    
      }    

      if (new_socket > 0){    
         printf("The Client is connected...\n");
      }

      recv(new_socket, buffer, bufsize, 0);    
      printf("%s\n", buffer);    
      write(new_socket, "hello world\n", 12);    
      close(new_socket);    
   }    
   close(create_socket);    
   return 0;    
}

这是一个创建Web服务器的小代码,在端口15000回复“hello wordl”。现在我希望我的服务器在请求(例如)“http://127.0.0.1:15000/luigi”回复文本“luigi”,即“/”之后的短语。谢谢!

2 个答案:

答案 0 :(得分:2)

recv 功能之后,您将拥有类似

的功能
GET /luigi HTTP/1.1
buffer中的

。这是浏览器发送的请求 GET之后的文本是基址的相对URL(127.0.0.1:15000)。现在,您可以解析缓冲区并执行任何操作。您可以转到http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html了解更多详细信息。

答案 1 :(得分:-1)

要添加user3864685所说的内容,您可以使用'strtok'函数在“GET /".

之后获取字符串