是否可以制作服务器(服务)的中继代理(应用层)?任何例子? C会更好

时间:2012-07-31 03:04:35

标签: sockets http

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

所以我想尝试以下

IE< - > agentC< --------- NAT / Internet /.....-----------& gt; agentS< -------> Apache Server

情景可能是......

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

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

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

我也参考以下内容: Is it possible to 'relay' a socket?

但问题是:

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数据(如pic,下载等)?

感谢您的耐心

1 个答案:

答案 0 :(得分:0)

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

由于这两个连接是独立的,因此无论是TCP还是其他UDP都无关紧要。

此外,如果您需要对“agentS”中的数据进行一些处理,那么您可以轻松实现数据。 “agentC”和“agentS”之间的协议甚至不必是HTTP,它可以是你想要的任何东西,因为程序可以进行协议转换。

作为旁注,在向网络服务器发送数据时,您使用"\r\n"结束行,并且标题由其自身行上的单个"\r\n"终止。因此,您只需在"\r\n\r\n"请求后发送GET