连接到 xampp 服务器上的 index.php 的 C 程序

C program that connects to index.php on xampp server

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

网上所有教程都是以创建C客户端和连接C服务器为主。但是我如何将 C 客户端连接到 xampp 服务器上的 PHP 文件?

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

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

能否将C程序连接到服务器。然后使用index.php形式的exec()命令作为POST请求,通过套接字发送给C程序?

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

谢谢

您可能不与 PHP 文件通信,而是与某些 Web 服务器 运行 PHP 程序(例如 Apache,XAMPP) for some HTTP requests. Spend several hours or days reading about HTTP (you need to understand it in some details and be aware of HTTP requests, responses, headers, cookies 的一部分, ETC...)。 HTTP 协议方面的原因(您的 C 应用程序应该发出什么样的 HTTP 请求?)。使用您的浏览器查看它发送的 HTTP 请求。

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

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

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

The C client will listen for HTTP messages

如果 C 程序 正在监听(有 Berkeley sockets, using some listen(2) or the equivalent on your system) it is not a client but a server. If it is a client it will emit HTTP requests -using connect(2) & send(2)- (and process the corresponding HTTP responses), and you'll better use a library (like libcurl) for that (because in the details HTTP is quite complex), that will handle low level details like connect , send, recv(2) 等......并且在您的位置进行缓冲。

The index.php file will contain a html form

这通常意味着一些 POST request. Details depend upon the <form HTML element

这取决于您实际想要实现的目标,即您将 'connect' 一个 c 程序转换为 index.php 是什么意思?

首先你应该意识到我们在这里谈论的是两个进程:(a) c 程序和 (b) 任何执行 PHP 脚本的解释器(可能是网络服务器) .

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

Wikipedia article 中您会看到 table 列出了几种方法:

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

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

  • 其他方式(看看table)

由于您的 PHP 脚本可能 运行 在网络服务器中,套接字解决方案很有前途: Web 服务器已经监听传入的连接,并提供了一个合适的协议来交换数据:HTTP .

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

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

现在,程序将是:

  1. C程序建立到socket的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 响应,但它足以scetch这个过程)

  1. Web 服务器将通过与 c 程序的连接发回 php 脚本 abc 的输出。

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

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

一般来说,最佳解决方案取决于您想要完成的任务。我假设你的例子只是一个例子,你可以按照我上面起草的方式解决它。但是,如果您真的只是想将某些内容打印到您的控制台,只需让您的 index.php 将其写入 file/pipe 然后 c 程序读取文件...

这样或那样,我觉得你有很多值得探索的地方......

此外,我想澄清最后一件事: 为了简单起见,我使用了'c program',但我不需要是一个c程序,但你的问题是指一个任意进程,它也可能是python脚本运行 python 口译员或...