C# 使用套接字c通过代理将请求从客户端中继到服务器#

C# 使用套接字c通过代理将请求从客户端中继到服务器#,c#,sockets,tcp,proxy,C#,Sockets,Tcp,Proxy,我在端口5888(虚拟端口)上侦听自定义tcp服务器。代理服务器侦听传入的连接。当代理收到HTTP请求时,它应该将相同的请求中继到不同的服务器 例如: 代理收到: 代理服务器应转发: 主服务器的响应应该直接发送到请求的客户端 在将新的HTTP请求中继到主服务器之前,我使用套接字接受连接并解析原始HTTP请求。这变得太复杂了,因为我必须将原始HTTP请求发送到主服务器,获取响应并将其发送到客户机。代理基本上变成了中间人。我只想把代理给 通信的一方,即更改主机地址到主服务器,然后主服务器应负责将响应

我在端口5888(虚拟端口)上侦听自定义tcp服务器。代理服务器侦听传入的连接。当代理收到HTTP请求时,它应该将相同的请求中继到不同的服务器

例如:

代理收到: 代理服务器应转发:

主服务器的响应应该直接发送到请求的客户端

在将新的HTTP请求中继到主服务器之前,我使用套接字接受连接并解析原始HTTP请求。这变得太复杂了,因为我必须将原始HTTP请求发送到主服务器,获取响应并将其发送到客户机。代理基本上变成了中间人。我只想把代理给 通信的一方,即更改主机地址到主服务器,然后主服务器应负责将响应发送到请求的客户端


如何做到这一点

HTTP通过从客户端到服务器发起的TCP连接工作。在存在代理的情况下,您至少需要两个连接—一个是从客户端到代理的连接,另一个是从代理到服务器的连接。这两个连接在某种意义上是“独立的”,它们都传输标准HTTP请求和响应。这里的代理充当终端服务器的客户端

您需要的是至少三个TCP连接,并且需要在与启动HTTP请求的连接不同的连接上发送HTTP响应。这超出了HTTP本身的范围——客户机不知道它在其他地方需要第二个连接,也不知道如何将一个连接上的请求与另一个连接上的响应相匹配。在HTTP中,您所能做的最好的事情就是重定向到不同的服务器,比如说,使用一个特殊生成的URL或其他东西

请记住,HTTP响应必须与原始请求使用相同的TCP连接。

根据定义,代理是中间人。除非代理直接传递有关源的信息,否则目标(主服务器)无法直接回复源。由于主服务器将对没有直接向其发起请求的源计算机进行响应,因此源计算机将需要一个始终侦听连接的进程。这是完全定制的要求。我很好奇,你想完成什么?