2012-10-01 88 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

擁有代理服務器軟件不是一個好主意,因爲它本質上是效率低下的。替代品可以是硬件代理或完全沒有代理。如果你只是爲了這個目的而實現代理,那麼一個好的路由器也會這樣做。 –

相關問題