C Клиент / сервер Связь с HTML-страницей - PullRequest
0 голосов
/ 10 июня 2011
newsockfd = accept(sockfd, struct sockaddr *) &cli_addr, &clilen);
FILE *write = fdopen(newsockfd, "w");
fprintf(write, "some html code is here");
fflush(write);

n = read(newsockfd,buffer,255);
printf(buffer);

Базовая настройка - это сервер, написанный на C, который ожидает подключения клиента, а затем отправляет ему HTML-код для отображения страницы.

Когда у меня нет двух последних строк кода, этот сервер работает нормально, и я могу подключиться к нему через браузер и увидеть, что все, что я написал в html, отображается отлично. Проблема в том, что на странице у меня есть HTML-форма, поэтому я хочу иметь возможность получать то, что люди вводят в форму на моем C-сервере. Когда я добавляю последние две строки кода для чтения с клиента и затем пытаюсь подключиться к серверу через мой веб-браузер, я больше не вижу формы или чего-либо еще, отображаемого на веб-странице, и мой сервер просто ждет ответа.

Мой вопрос: почему, когда я добавляю эти строки кода, клиент больше не видит, что должно быть на веб-странице, и есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 10 июня 2011

Вы пытаетесь написать веб-сервер с нуля на C ... Я не могу представить более сложный способ сделать это.Протокол HTTP не имеет состояния.Сервер прослушивает порт TCP для нового соединения.Клиент подключается и отправляет HTTP-запрос на сервер.Сервер анализирует HTTP-запрос и отправляет HTTP-ответ обратно Клиенту.Клиент отключается .Веб-браузеры обычно не оставляют TCP-соединения открытыми для веб-сервера после получения ответа.Есть исключения из этого, но это требует, чтобы вы отправляли специальные заголовки HTTP клиенту и чтобы ваш сервер его поддерживал.

Могу ли я смиренно предложить вам сэкономить много боли, выполнив следующее:*

  • Установите веб-сервер (достаточно apache).Это освободит вас от всего кода сокета C, что позволит вам сосредоточиться на обработке данных.
  • Если вы хотите использовать C для обработки взаимодействий между сервером и клиентом, вы можете использовать CGI Cбиблиотека, которая делает большую тяжелую работу HTTP для вас.Нечто вроде http://www.boutell.com/cgic/ например.В противном случае, Perl или PHP - хороший вариант.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...