2014-10-01 4 views
0

У меня есть проблема с моим кодом о веб-сервереC-код, простой веб-сервер (код OK)

#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;  
} 

это немного кода, чтобы создать веб-сервер, который в порту 15000 ответ с «привет wordl ". Теперь я хотел бы, чтобы мой сервер по запросу (например) «http://127.0.0.1:15000/luigi» ответил текстом «luigi», то есть с фразой после «/». Благодаря!

+3

В чем проблема? В чем вопрос? – Klaus

+0

этот код в порядке! Но я бы это сделал, когда напишу, например, «http://127.0.0.1:15000/start» ответ с фразой после /. Так понятно? – luigi

+0

Если я пишу «http://127.0.0.1:15000/luigi» ответ luigi (на мониторе). Если я напишу ответ «http://127.0.0.1:15000/finish» (на мониторе) – luigi

ответ

2

После RECV функции, вы будете иметь что-то вроде

GET /luigi HTTP/1.1 

в buffer .Это отправлен запрос в браузере.
Текст после GET является относительным адресом вашего базового адреса (127.0.0.1:15000). Теперь вы можете проанализировать буфер и делать все, что хотите. Вы можете перейти к http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html для получения более подробной информации.

+0

Вопрос в том, что после «/» текст будет случайным. Я бы хотел, чтобы мой код отвечал (на мониторе) с тем же текстом (после /). я надеюсь, что будет ясно. – luigi

+0

Вопрос в том, что после «/» текст будет случайным, но веб-сервер будет отвечать текстом после «/». Я надеюсь, что будет ясно – luigi

+0

Независимо от текста после «/», он будет там в запросе, отправленном браузером сразу после ключевого слова «GET». Попробуйте «printf («% s », буфер); после функции «recv», это поможет вам понять формат запроса. –

-1

Чтобы добавить в список user3864685, вы можете использовать функцию 'strtok' для получения строки после "GET /".

+0

-1. Это не очень хорошая форма для ответа, это скорее комментарий. – unwind

+0

Моя репутация не «50», поэтому я не могу комментировать чей-то ответ. Пожалуйста, не голосуйте, не зная вопроса, это раздражает! Я просто хотел помочь с дополнительной информацией и не мог комментировать. – vvvv

+0

Хорошо, честная точка. Затем вы должны удалить или отредактировать этот ответ, чтобы улучшить его качество. Я не могу удалить downvote, если ответ не отредактирован (это политика/дизайн SO, это не мое решение). – unwind

Смежные вопросы