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

时间:2018-05-17 12:02:39

标签: c sockets winsock2 socketserver winsockets

我希望设置一个可以与在本地XAMPP服务器上运行的index.php文件通信的C客户端。

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

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

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

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

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

谢谢

2 个答案:

答案 0 :(得分:3)

您可能没有与PHP文件进行通信,但是某些Web服务器运行该PHP程序(例如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 请求 - 使用connect(2)& send(2) - (并处理相应的HTTP 响应),您最好使用一个库(如libcurl)(因为详细信息,HTTP是相当的)复杂的),它将处理低级别的详细信息,例如connectsendrecv(2)等......以及您所在位置的缓冲。

  

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

这通常意味着一些POST request。细节取决于<form HTML element

答案 1 :(得分:0)

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

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

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

Wikipedia article中,您会看到一个列出多种方式的表格:

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

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

  • 其他方式(看一下表)

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

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

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

现在,程序将是:

  1. C程序与socket test.me:80
  2. 建立TCP连接
  3. c程序通过以

    的形式发送文本来发送 HTTP GET 请求

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

  4. 服务器将调用index.php,为其提供键值对a = 31,b = 19

  5. 该脚本将执行操作,并将内容打印到stdout,如:

    abc

  6. (这不是一个有效的HTTP响应,但它足以一般地扫描程序)

    1. Web服务器将通过与c程序的连接发回php脚本abc的输出。
    2. 如您所见,在此示例中,您转移了

      1. a = 31,b = 19从c程序到web服务器/ index.php
      2. abc从web server / index.php到c程序
      3. 通常,最佳解决方案取决于您想要完成的任务。我假设你的例子只是一个例子,你可以按我上面的方式解决它。但是,如果你真的只想在你的控制台上打印一些东西,只需让你的index.php将它写入文件/管道并且c程序读取文件......

        这种方式或其他方式,我觉得你有很多东西需要探索......

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