-1

我正在寻找一个可以与在本地 XAMPP 服务器上运行的 index.php 文件进行通信的 C 客户端。

所有在线教程都是基于创建 C 客户端并连接到 C 服务器。但是如何将 C 客户端连接到 xampp 服务器上的 PHP 文件?

我是否需要在 C 客户端和 index.php 文件中使用 PHP 中的套接字打开套接字?或者我可以在 C 程序中打开一个套接字并将其指向 localhost/index.php 吗?

C 客户端将侦听来自托管 index.php 的服务器的 HTTP 消息。index.php 文件将包含一个 html 表单,我可以在其中输入一个句子,然后 C 程序会将该句子打印到计算机终端中。

是否可以将C程序连接到服务器。然后使用 index.php 表单中的 exec() 命令作为 POST 请求,并通过套接字将其发送到 C 程序?

任何帮助或已知文章都会很棒。

谢谢

4

2 回答 2

3

您可能不与 PHP 文件进行通信,而是与一些运行该 PHP 程序的 Web 服务器(例如 Apache,XAMPP的一部分)进行一些 HTTP 请求。花几个小时或几天的时间阅读有关HTTP的内容(您需要了解它的一些细节并了解 HTTP请求、响应、标头cookie等......)。HTTP 协议方面的原因(您的 C 应用程序应该发出什么样的 HTTP 请求?)。使用浏览器查看它发送的 HTTP 请求。

然后,您要使用 C 中的一些 HTTP 客户端库,例如libcurl

(还要注意 C 中存在 HTTP 服务器库,例如libonion;您可能在这里不需要它)

也许websockets可能对您有用,但可能不是。

C 客户端将监听 HTTP 消息

如果 C 程序正在侦听(使用Berkeley 套接字,使用一些listen(2)或系统上的等效项),它不是客户端而是服务器。如果它是一个客户端,它将发出HTTP请求 - 使用connect(2)send(2) - (并处理相应的 HTTP响应),你最好使用一个库(如libcurl)(因为在细节 HTTP非常复杂),它将处理低级细节,如connect, send, recv(2)等......以及您所在位置的缓冲。

index.php 文件将包含一个 html 表单

这通常意味着一些POST请求。细节取决于<formHTML 元素

于 2018-05-17T12:11:27.097 回答
0

这取决于您实际想要实现的目标,即您将 ac 程序“连接”到index.php?

您应该意识到的第一件事是,我们在这里谈论的是两个进程:(a) c 程序和 (b) 执行 PHP 脚本的任何解释器(可能是 Web 服务器)。

您想在两个进程之间交换数据,因此我们讨论进程间通信

Wikipedia 文章中,您会看到一个表格,其中列出了几种方法:

  • 文件:您的 PHP 脚本可以写入文件,而 c 程序可以从中读取(或者,在 Unix 下,管道会更适合)

  • 套接字:正如您已经提到的,其中一个程序可以通过套接字建立连接并通过该连接交换它们的数据。

  • 其他方式(查看表格)

由于您的 PHP 脚本可能在 Web 服务器中运行,因此套接字解决方案很有希望:Web 服务器已经侦听传入连接,并提供了一个体面的协议来交换数据:HTTP

我不会重复 Basile 的答案,而只是举例说明如何使用 CGI 在 c 程序和 PHP 脚本与 Web 服务器之间交换一些数据:

Web 服务器提供了一个 URL,它将调用 PHP 脚本,例如http://test.me/test.php.

现在,程序将是:

  1. C程序建立到socket test.me:80的TCP连接
  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. abcWeb 服务器将通过与 c 程序的连接将php 脚本的输出发回。

如您所见,在此示例中,您转移了

  1. a=31, b=19 从c程序到web服务器/index.php
  2. abc从 web server/index.php 到 c 程序

一般来说,最好的解决方案取决于你想要完成什么。我假设您的示例只是一个示例,您可以按照我上面起草的方式解决它。但是,如果您真的只是想在控制台上打印一些东西,只需让您的 index.php 将其写入文件/管道,然后 c 程序读取文件...

这样或那样,我觉得你有很多探索......

此外,我想澄清最后一件事:为了简单起见,我使用了“c程序”,但我不必是ac程序,但您的问题涉及任意进程,它也可能是由python运行的python脚本口译员或...

于 2018-05-17T21:36:40.713 回答