【问题标题】:C program that connects to index.php on xampp server连接到 xampp 服务器上的 index.php 的 C 程序
【发布时间】:2018-05-17 12:02:38
【问题描述】:

我希望设置一个可以与本地 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 程序?

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

谢谢

【问题讨论】:

  • 究竟连接什么以及如何连接?您的 PHP 服务器做什么以及它与 C 客户端通信的内容是什么?如果您确实想使用套接字,那么只需打开套接字 - 客户端不应该关心服务器是用什么语言编写的(反之亦然)
  • 感谢您的回复。目前我正在寻找一个基本的 c 客户端,它将监听来自 php 文件的消息,例如,我希望能够将一个句子输入一个 html 表单,它将在 PC 的终端中打印结果运行 C 客户端。我对 PHP 很好。只是不知道从哪里开始 C 编程。
  • 不要评论您的问题,但请编辑您的问题以改进它。目前还不清楚,需要改进(例如,根据 HTTP 请求解释您想要什么,以及您的 C 客户端应该做什么)。提供更多背景和动机。
  • 您可以访问 PHP 源代码吗?你能改进它吗?考虑独立于发出的 HTML 代码和其中的 HTML 表单设计一些 web service

标签: c sockets winsock2 socketserver winsockets


【解决方案1】:

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

那么,你要使用的是 C 语言中的一些 HTTP 客户端库,例如 libcurl

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

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

C 客户端将监听 HTTP 消息

如果 C 程序正在 监听(使用 Berkeley sockets,使用一些 listen(2) 或您系统上的等价物)它不是客户端而是服务器。如果它是客户端,它将发出 HTTP requests - 使用connect(2) & send(2)- (并处理相应的HTTP 响应),你最好使用一个库(比如libcurl)(因为细节上HTTP非常复杂),它将处理像connectsendrecv(2)等低级细节......和在你的地方缓冲。

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

这通常意味着一些POST request。详情以<form HTML element为准。

【讨论】:

    【解决方案2】:

    这取决于您实际想要实现的目标,即您将 c 程序“连接”到 index.php 是什么意思?

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

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

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

    • 文件:您的 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. Web 服务器将通过与 c 程序的连接发回 php 脚本 abc 的输出。

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

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

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

    不管怎样,我觉得你还有很多值得探索的地方……

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

    【讨论】:

      猜你喜欢
      • 2018-02-20
      • 2017-06-07
      • 1970-01-01
      • 2020-05-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-19
      • 1970-01-01
      • 2016-02-19
      相关资源
      最近更新 更多