【问题标题】:TCP Sockets connecting to a server on two different ports在两个不同端口上连接到服务器的 TCP 套接字
【发布时间】:2012-09-22 08:58:17
【问题描述】:

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

端口 80 用于服务 HTML 页面,而端口 8081 用于将数据流式传输到客户端。

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

我一直在决定如何连接 2 个端口以将数据从客户端发送到主服务器?

【问题讨论】:

    标签: c# sockets tcp proxy


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢您的回复。是的,我在同一个端口上向客户端发送 Html 和流数据。在这种情况下,实际的解决方案是什么?
    • 我假设您正在嵌入一个activex组件或一个插件对象,可能是silverlight或flash对象。我的建议是让该对象直接连接到流媒体服务器。
    • 拥有代理服务器软件并不是一个好主意,因为它们本质上是低效的。替代方案可以是硬件代理或根本没有代理。如果您只是为此目的实现代理,那么好的路由器也会这样做。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      根据您切换连接的频率,后一个版本可能会产生巨大的开销,而第一个版本允许您几乎同时向两个端口发送数据。

      【讨论】:

      • 打开 2 个套接字连接到 2 个不同端口上的相同 IP 对我有用。
      猜你喜欢
      • 2014-08-18
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      • 2016-06-07
      • 2016-12-23
      • 2015-10-04
      • 2019-08-15
      • 2012-11-13
      相关资源
      最近更新 更多