2012-10-01 89 views
1

我有一个自定义的TCP服务器监听端口5888(虚拟端口)。代理服务器侦听传入的连接。当代理收到某些页面的HTTP请求时,它应该将其中继到端口80上的主服务器。对于其他页面请求,代理服务器需要在端口8081上向主服务器发送数据。连接到两个不同端口上的服务器的TCP套接字

端口80被使用以服务HTML页面,因为端口8081用于将数据流式传输到客户端。

我能够接收代理上的传入连接,然后从客户端读取数据。读取数据后,我可以确定要在主服务器上连接哪个端口以发送数据。

我被困在决定如何连接2端口发送数据从客户端到主服务器?

回答

1

在这种情况下,您需要2个套接字连接对象到不同端口上的相同IP(这是合法的),或者您有一个连接对象根据您必须处理的端口重新连接。

根据您不得不切换连接的频率,后一版本的开销可能会很大,再加上第一个版本,您可以几乎同时将数据发送到两个端口。

+0

打开2个套接字连接到2个不同端口上的相同IP为我工作。 – NewUnhandledException

0

您需要停止将您的程序视为服务器。收到连接后,读取数据,然后决定将其发送到哪个端口,换档并按客户的要求开始操作。

只需在端口80或8081上打开一个到“localhost”的新连接,并重新发送您收到的数据,就好像您是原始客户端一样。

0

您的客户端通过端口5888连接到代理服务器,因此无论您从哪个真实服务器(Web或流)获取数据,都将仅使用端口5888将数据提供给客户端。

这似乎是一个不太实际的解决方案。我在这里假设你正试图实现一种控制端口和数据端口结构,其中一个端口控制另一个端口的流。

只需创建两个套接字就足以从两台服务器获取数据。在这里,您将不得不手动创建一个客户端可以理解的协议,因为您将使用单个端口向客户端提供html和流数据。

+0

感谢您的回复。是的,我将同一端口上的Html和流数据发送给客户端。在这种情况下,实际的解决方案是什么? – NewUnhandledException

+0

我假设你正在嵌入一个activex组件或一个插件对象,可能是silverlight或flash对象。我的建议是让该对象直接连接到流媒体服务器。 –

+0

拥有代理服务器软件不是一个好主意,因为它本质上是效率低下的。替代品可以是硬件代理或完全没有代理。如果你只是为了这个目的而实现代理,那么一个好的路由器也会这样做。 –

相关问题