0

我正在尝试一切 NAT 遍历以使 HTTP(或其他)服务器可以从 Internet 访问。这是上一个问题,但没有运气。 NAT 后面的 HTTP 服务器

所以我正在尝试执行以下操作

IE <--> agentC <---------NAT/Internet/.....----------->agentS<------->Apache 服务器

场景可能是……

1.用户在IE中输入地址如“localhost:9999”(agentC)

2.agentC 使用 Stun/TURN/ICE 连接 agentS

3.agentS 将数据中继到Apache Server,然后回复客户端。

我还参考以下内容: 是否可以“中继”套接字?

但问题是:

1.agentC到agentS之间的连接可能是UDP,但是Http在TCP上,是否可以“中继套接字或数据包”

2.我正在编写agentS<---->Apache部分的测试代码,

((pp = popen("echo -e \"GET / HTTP/1.0\\n\\n\\n\"| nc localhost 80", "r")) == NULL)
.........

但输出总是“400 Bad Request”。(而在控制台输入“echo -e”GET / HTTP/1.0\n\n\n“| nc localhost 80”会成功)

3.我将一个简单的控制台聊天室修改为agentS和agentC,是否可以携带http数据(如图片,下载...等)?

感谢您的耐心等待

4

1 回答 1

0

您并没有真正中继套接字,而是中继数据。例如,您的示例中的“agentS”打开一个侦听套接字,它接受来自“agentC”的连接。当它从“agentC”获得新连接时,“agentS”连接到 Web 服务器并进入一个循环,其中它从任一连接(“agentC”或 Web 服务器)读取的所有内容都发送到另一个连接。

由于这两个连接是独立的,因此一个是 TCP 而另一个是 UDP 并不重要。

此外,如果您需要对“agentS”中的数据进行一些处理,这很容易,因为您实际上拥有数据。“agentC”和“agentS”之间的协议甚至不必是HTTP,它可以是任何你想要的,因为程序可以进行协议转换。

作为旁注,当向网络服务器发送数据时,您以 结束行,并且标头在其自己的行中"\r\n"以单个结尾。"\r\n"所以你只需要"\r\n\r\n"在请求之后GET发送。

于 2012-07-31T05:25:32.853 回答