Программа на C, которая подключается к index.php на сервере xampp - PullRequest
0 голосов
/ 17 мая 2018

Я хочу настроить клиент C, который может взаимодействовать с файлом index.php, работающим на локальном сервере XAMPP.

Все интерактивные учебные пособия основаны на создании клиента C и подключении к серверу C. Но как мне подключить клиент C к файлу PHP на сервере xampp?

Нужно ли открывать сокеты как на клиенте C, так и в файле index.php, используя сокеты в PHP? Или я могу просто открыть сокет в программе на C и указать ему localhost / index.php?

Клиент C будет прослушивать HTTP-сообщения с сервера, на котором будет размещен index.php. Файл index.php будет содержать html-форму, в которую я могу ввести предложение, а затем программа C напечатает это предложение в компьютерном терминале.

Можно ли подключить программу C к серверу. Затем используйте команду exec () в форме index.php в качестве запроса POST и отправьте его программе C через сокет?

Любая помощь или известные статьи будут великолепны.

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 мая 2018

Это зависит от того, чего вы на самом деле хотите достичь, то есть, что вы подразумеваете под «подключением» программы c к index.php?

Первое, что вы должны понять, это то, что мы говорим здесь о двух процессах: (a) программа c и (b) любой интерпретатор, выполняющий скрипт PHP (возможно, веб-сервер).

Вы хотите обмениваться данными между двумя процессами, поэтому мы говорим о Межпроцессное взаимодействие .

В статье Википедии вы видите таблицу, в которой перечислены несколько средств:

  • Файлы: Ваш PHP-скрипт может записывать в файл, программа c считывает из него (или, в случае Unix, Pipes подойдет даже лучше)

  • Сокеты. Как вы уже упоминали, одна из программ может устанавливать соединение через сокеты и обмениваться данными через это соединение.

  • другие средства (взгляните на стол)

Поскольку ваш PHP-скрипт, вероятно, выполняется на веб-сервере, решение для сокетов будет многообещающим: Веб-сервер уже прослушивает входящие соединения и предоставляет достойный протокол для обмена данными: HTTP .

Я не буду повторять ответ Basile, а просто приведу пример обмена некоторыми данными между программой c и сценарием PHP с веб-сервером с использованием CGI:

Веб-сервер предоставляет URL, который будет вызывать PHP-скрипт, например http://test.me/test.php.

Теперь процедура будет:

  1. Программа на C устанавливает TCP-соединение с сокетом test.me:80
  2. Программа c отправляет запрос HTTP GET , передавая текст в виде

    GET /test.php?a=31&b=19 http/1.1

  3. Сервер вызовет index.php, предоставив ему пары ключ-значение a = 31, b = 19

  4. Скрипт будет делать что-то и печатать что-то на стандартный вывод:

    abc

(Это не правильный HTTP-ответ, но его достаточно, чтобы набросать процедуру в общем)

  1. Веб-сервер отправит обратно вывод php-скрипта abc через соединение с программой c.

Как видите, в этом примере вы перевели

  1. a = 31, b = 19 из программы c на веб-сервер / index.php
  2. abc с веб-сервера / index.php в программу c

В общем, лучшее решение зависит от того, чего вы хотите достичь. Я предполагаю, что ваш пример - всего лишь пример, и вы можете решить его так, как я написал выше. Однако, если вы действительно хотите, чтобы что-то было напечатано на вашей консоли, просто попросите ваш index.php записать это в файл / канал, и программа c прочитает файл ...

Так или иначе, я чувствую, что вам есть, что исследовать ...

Кроме того, я хочу уточнить одну последнюю вещь: Для простоты я использовал 'c program', но мне не обязательно быть программой c, но ваша проблема связана с произвольным процессом, это также может быть скрипт на python, выполняемый интерпретатором python или ...

0 голосов
/ 17 мая 2018

Возможно, вы не общаетесь с файлом PHP, но с некоторым веб-сервером, на котором запущена эта программа PHP (например, Apache, часть XAMPP ) для некоторых запросов HTTP.Потратьте несколько часов или дней на чтение HTTP (вам нужно разобраться в этом подробнее и знать о HTTP запросах , ответах, заголовках , файлах cookie и т. Д.) Причина с точки зрения протокола HTTP (какие HTTP-запросы следует делать вашему C-приложению?).Посмотрите в браузере HTTP-запросы, отправленные им.

Затем вам понадобится какая-нибудь клиентская библиотека HTTP на C, например libcurl .

(Beтакже помните, что в C существуют серверные библиотеки HTTP, например, libonion ; вам, вероятно, здесь это не нужно)

Возможно, websockets может быть полезно для вас, но, вероятно,not.

Клиент C будет прослушивать HTTP-сообщения

Если программа C прослушивает сокетами Беркли используя listen (2) или эквивалент в вашей системе) это не клиент, а сервер.Если это клиент, он будет отправлять HTTP запросов с использованием connect (2) & send (2) - (и обрабатыватьсоответствующие HTTP отклики ), и для этого вам лучше использовать библиотеку (например, libcurl) (поскольку в деталях HTTP довольно сложный), которая будет обрабатывать детали низкого уровня, такие как connect, send, recv (2) и т.д ... и буферизация у вас.

Файл index.php будет содержать html-форму

Обычно это означает POST запрос .Детали зависят от элемента <form HTML .

...