我需要一些指針(工作的例子將是美好的)在以下問題。我是套接字編程的新手,雖然不是.net,但不介意在VB或c#中有任何幫助。TCPListener多個端口
我有一個「客戶」系統,它會吐出數據的常規塊(其實際上是ASCII)每幾個(讓說,10)秒。數據的尺寸很小,可能小於1K,我可以讓每個輸出按特定順序分隔(如<EoM>
)。這個「客戶端」將輸出到多個(多於1個,少於5個)不同的端口。
我需要編寫一個服務器,它將打開所需數量的端口,監聽它們以獲取數據。當一個消息到達其中一個端口時,最後使用<EoM>
定界符,我希望能夠獲取該數據,然後對其進行處理(解析並輸入數據庫以獲取信息)。並繼續聆聽下一條數據到達。這需要對所有定義的端口進行。如果客戶端應該斷開連接,我希望端口能夠等待並監聽重新連接,然後像以前一樣繼續處理。但作爲一個單一的客戶端將進行通信,我假設如果1端口斷開連接,可以重新啓動服務器進程,如果這比斷開連接後再聽更容易。
很抱歉的長期並不十分確切的問題,就像我說的,是新的Socket編程,所以如何做到這一點任何實際的例子,將不勝感激。最終的結果理想情況下是一個Windows服務,但是我希望將它作爲一個表單應用程序啓動,直到我將它全部用於調試。
乾杯任何幫助。
你要求的不是你想要的。所有的客戶端都應該連接到同一個服務器端口,如果發生斷開,客戶端應該重新連接。應該不需要重新啓動任何進程 - 這對服務進程來說會有些不便:) –
2012-08-07 10:55:32
TCP/IP不處理消息,只是一個字節流。期望從任意點點滴滴中重新組合你的「大塊數據」。 [This](http://stackoverflow.com/questions/11804131/asynchronous-tcp-socket-bytes-merging/11804312#11804312)可能會有所幫助。 – HABO 2012-08-07 10:59:42
通常,應用程序在端口上偵聽連接請求。收到請求後,會打開另一個端口與新客戶端通信。原始端口可以繼續偵聽其他連接請求。根據您的應用程序,您可能想要監聽單個端口號並接受客戶端的多個連接。連接後每個客戶端都可以識別自己。您的應用程序將管理與您所期望的設置有關的重複或丟失客戶端的任何問題。 – HABO 2012-08-07 11:06:55