【问题标题】:Boost asio socket connection through proxy server通过代理服务器提升 asio 套接字连接
【发布时间】:2013-02-14 19:19:09
【问题描述】:

我有一个客户端/服务器设置,可以使用 boost 的 asio 套接字相互通信。该协议很简单,它以一个 64 位值开始,告诉后面的数据有多长,其余的以 JSON 形式出现。

问题是,它不支持客户端和服务器之间的代理,现在我们需要支持它。

正如我在网上看到的,看起来代理一般都非常简单。对于 HTTP 代理,您可以联系代理并向其发送 CONNECT 请求以获得您想要的实际 URL,然后它就会继续传递信息。

但我不明白如何将其与我的非 HTTP 数据相协调。

  1. 我是否需要更改我的“协议”以使其与代理一起使用 服务器?我看到了这个建议:

    CONNECT http://my.server.com:80 HTTP/1.0\r\n\r\n

    但是我的非协议怎么办?

  2. 我试过告诉它我正在使用 HTTP,然后发送 接下来是 JSON 数据,但遇到了一系列问题, 我不知道问题是否只是我的问题 实施,或者如果我试图做的事情根本行不通。

  3. 如果我完全不在这儿,我很想被理顺。

【问题讨论】:

  • 如果您编写第三个守护程序,它对我来说似乎最简单,它会说出您的协议并充当客户端和服务器。

标签: c++ sockets networking proxy boost-asio


【解决方案1】:

我不认为搭载 HTTP 代理是正确的解决方案。现在你有

Client <---------> Server

但你想要

Client <------> proxy <------> Server

我建议自己编写代理。它将像您的服务器一样是一个守护进程,并且应该同时使用您的客户端和服务器协议。协议可能需要修改,以便代理知道服务器地址和服务。同样,客户端需要额外的信息才能连接到代理而不是服务器。

【讨论】:

  • 我怀疑你的建议可以回答我的问题。也就是说,出于公司原因,这行不通。但由于没有人向我解释如何使我的设置工作,我担心这意味着没有简单而干净的解决方案,这意味着我需要重写一些东西来使用 HTTP。
  • @user2073267 企业原因是什么?
  • 告诉客户他们必须运行我们的代理服务器。因此,我们不会让我们的应用程序正常工作,而是告诉他们他们也必须安装我们的代理。考虑到他们为自己使用代理服务器的地方是他们最关心安全的地方,所以这尤其不可行,因此他们不太可能想要运行我们的新代理服务器。
  • @user2073267 你应该用这些限制编辑你的问题
最近更新 更多