C++ 重定向HTTP请求

C++ 重定向HTTP请求,c++,linux,http,C++,Linux,Http,我正在为防火墙后面的摄像头创建即插即用软件。为了做到这一点,摄像头有一个命令,告诉它连接到我的服务器(通过http),在这个服务器中我可以用http与它对话 我需要将这个连接导出给用户,这样当我收到http请求时,我就可以直接将它们转发给摄像机,然后将响应转发回用户 我最初的想法是使用tcp——使用tcp获取摄像头连接,并持续等待用户连接。当我获得一个用户连接时,我将所有东西从它转发到相机,从相机转发到它。换句话说-普通的旧端口重定向 当用户需要与摄像头建立多个活动连接时,问题就开始了。我希望这

我正在为防火墙后面的摄像头创建即插即用软件。为了做到这一点,摄像头有一个命令,告诉它连接到我的服务器(通过http),在这个服务器中我可以用http与它对话

我需要将这个连接导出给用户,这样当我收到http请求时,我就可以直接将它们转发给摄像机,然后将响应转发回用户

我最初的想法是使用tcp——使用tcp获取摄像头连接,并持续等待用户连接。当我获得一个用户连接时,我将所有东西从它转发到相机,从相机转发到它。换句话说-普通的旧端口重定向

当用户需要与摄像头建立多个活动连接时,问题就开始了。我希望这不会成为一个问题,但我发现(或者至少我认为是这样)浏览器实际上打开了几个到同一个站点的连接来下载文件

现在我别无选择,只能编写代码,实际读取http请求,将其发送到摄像头,等待摄像头的响应,然后将其发送回。 这是只使用一个连接就可以允许多个连接到同一个摄像头的唯一方法(据我所知)

我的问题是-是否有任何现有的代码来实现这一点?图书馆?软件还是有更好的方法来做我想做的事

编辑:很明显,我错了,浏览器创建了几个到服务器的连接。实际上,服务器返回HTTP 1.0响应,正如我发现的,HTTP 1.0允许每个连接有一个请求(和响应)。我看到的是,浏览器只是将先前打开的旧连接保持打开状态,然后为新请求打开一个新连接

然而,我仍然必须自己做HTTP消息转发(我只实现了“text/html”、“text/plain”和相机使用的一些其他自定义内容类型)。例如,浏览器根本不显示图片。所以,如果有人知道任何做http消息转发的代码(或者一个做http消息转发的应用程序),我很想听听

作为旁注,我已经检查了httpd(apache)的代理功能。它不仅非常复杂,而且似乎只允许机器上的一个代理连接。所以我放弃了这个方向,自己实现了基本转发


多亏了嵌入相机中的Web服务器无法缩放,所以您应该查询相机,将图像放入缓存,然后将最新图像推送到每个客户端(最好使用现有的HTTP 1.1连接)

如何做到这一点取决于您的延迟需求(刷新之间的延迟)以及将有多少客户端加入游戏


听起来像是G-WAN(一个带有C、C++、D、java和Objul-C++ C/S脚本的动态服务器生成动态内容)的工作,但我可能是部分的,因为我是项目的一部分。

您所寻找的功能通常由HTTP代理服务器提供。有很多开源项目。。也许你能找到一个容易定制的?你能提供更多的信息吗?哪一方发起连接;您的目标是从外部连接到摄像机,还是让摄像机连接到其他设备?我将服务器地址硬连接到摄像机,然后当它连接到用户的LAN(通过http)时,它会重新连接到我。然后,我需要接受来自外部的用户连接,并允许他们访问摄像头(使用我拥有的连接)。如果我错了,请纠正我:1)在防火墙上,您有一条规则说:所有输入:转发到:2)您可以通过http访问摄像头,如果是这样3)您可以有多个内部客户端(即多个浏览器)连接到摄像头时没有问题(因此没有防火墙/路由器),但当客户端从外部连接(通过防火墙/路由器)时它不工作?好吧,实际上我自己做转发(在自定义程序中)。它也可能是一个端口转发,但相机需要有人在第一次连接时向其发送ack(一些http请求)。之后,我完全转发端口上的所有内容。我可以通过http(仅)访问相机,因为连接是在http中。我认为这也是一个肯定的答案,但服务器和摄像头不在同一个网络中,因此只有该网络中的浏览器可以工作(不知道摄像头的ip),但外部浏览器肯定不能工作(因为它们需要多个并发连接)。