2010-09-14 100 views
3

我是一個小工程師希望從這裏的所有有經驗的人尋求一些建議關於如何處理這個問題。C#字節流通過TCP

我已經分配了一個項目來創建一個通過TCP進行字節流式傳輸的服務器/客戶端應用程序。我們公司通過一個調度軟件處理帶有GPS的雙向無線電,我們希望製作一個服務器/客戶端應用程序。目前,調度軟件可以連接到用戶必須使用的中央基站,但是我們希望能夠從遠程位置訪問該軟件(如果基站由調度員可以在的數英里遠的中繼器)。

用戶/客戶端 - >麥克風的調查地點 - >服務器 - >基站 - > OTA信號 - >無線和背部

我一直在尋找Windows通信基礎,但什麼其他的方法我可以接近這個嗎?

我將主要使用C#/。NET/Visual Studio 2008中

回答

1

我們使用UDP將GPS更新從汽車發送到處理更新的服務器。在類似的應用程序中(您經常使用有限的帶寬),您可以真正區分UDP和瞬時TCP連接(如HTTP)之間的區別(從遠程主機到服務器獲取數據需要多長時間)。一個UDP數據包將會在瞬間到達目的地,並且TCP連接的設置非常明顯,通常需要幾秒鐘才能完成。我喜歡WCF框架,但是如果你的應用程序是我一直在使用的那種系統,我懷疑你會對它感到滿意(除非可以在更新之間有很長的時間間隔)。

最近,我一直在使用持久性TCP連接(使用原始套接字),如果您想確保數據包到達目的地,這是一個好方法。儘管如此,我相信,儘可能地保持連接的開放,並且在代碼斷裂的情況下合併代碼以重新連接。

+0

如果您有興趣,這裏是另一篇關於使用套接字主題的鏈接:http://stackoverflow.com/questions/3609280/tcpclient-send-data-and-recieve-data-over-network/ 3609784#3609784 – 2010-09-14 17:30:30

+0

感謝您的回覆。如果我正在考慮同時處理多個客戶端/連接,這也是一個好方法嗎?我試着用服務器中的線程來處理新的客戶端,但是我認爲它鎖定在無限while循環中。線程上的任何好的讀取? – mastofact 2010-09-14 17:43:24

+0

我傾向於認爲這是處理多個客戶端的好方法。正如你所提到的,我爲每個新連接創建了一個線程,儘管我沒有看到鎖定問題。在另一個線程中,我發佈了一些帶有註釋的示例代碼,我認爲這是一個服務器上合理的良好開端。該代碼不會在其自己的線程中創建每個新連接,儘管我的一條評論描述了這一點。如果您發現任何有用的信息,我很樂意回答任何後續問題。幸運的是,在C#中有很多關於套接字編程的文章... – 2010-09-14 18:22:57

0

如果你只是想要一個原始字節流,然後Socket或稍多封裝TcpClient可能是一個比較輕重量的溶液。

但是,如果你想發送完整的數據結構和「調用函數」,那麼WCF似乎是一個不錯的選擇。

在WCF中,您有接近以實際對象爲參數調用常規方法的編程經驗,但使用Socket您只需發送字節數組,並且需要通過您自己解釋結果。