我想擴展我對.NET框架的體驗,並希望構建客戶端/服務器應用程序。實際上,客戶端/服務器是一個小型的銷售點系統,但首先我要關注服務器和客戶端之間的通信。 將來,我想讓它成爲一個WPF應用程序,但現在,我只是從一個控制檯應用程序開始。C#實現TCP客戶端服務器應用程序的最佳方式
2功能:
客戶機接收(S)的數據集,每15/30分鐘的具有改變價格/新產品
(因此,代碼將是一個異步方法與更新一個Thread.sleep 15/30分鐘)。關閉客戶端應用程序時,送樣的報告(例如,XML)
在互聯網上,我發現很多的例子,但我不能決定哪一個是最好/最安全/高效的工作方式,所以我需要一些建議,我應該實施哪些技術。
CLIENT/SERVER
我想,處理最多6個1個客戶服務器應用程序。我讀過線程使用了很多MB,也許更好的方法是使用異步/等待功能的任務。
用ASYNC實施例/ AWAIT
http://bsmadhu.wordpress.com/2012/09/29/simplify-asynchronous-programming-with-c-5-asyncawait/
實施例有螺紋
mikeadev.net/2012/07/multi-threaded-tcp-server-in-csharp/
舉例與SOCKETS
codereview.stackexchange.com/questions/5306/tcp-socket-server
這似乎是插座的一個很好的例子,然而,revisioned代碼並非完全因爲不是所有的類都包含 MSDN工作.microsoft.com/en-us/library/fx6588te(v = vs.110).aspx MSDN的這個例子有更多的Buffersize和一個消息結尾的信號。我不知道這是否是一種「老辦法」,因爲在我之前的例子中,他們只是從客戶端向服務器發送一個字符串,就是這樣。
.NET Framework遠程處理/ WCF 我也發現了一些關於.NET和WCF但不要對遠程訪問的一部分」知道我是否需要實現這一點,因爲我覺得與異步/等待的例子也不錯。
序列化對象/ DATASET/XML
什麼是它之間發送數據的最佳方式?求一個XML序列化器或只是二進制?
實施例與數據集 - > XML
stackoverflow.com/questions/8384014/convert-dataset-to-xml
實施例與遠程處理
akadia.com/services/ dotnet_dataset_remoting.html
如果我應該使用Async/Await方法,在伺服應用程序中這樣做是否正確:
個 while(true)
{
string input = Console.ReadLine();
if(input == "products")
SendProductToClients(port);
if(input == "rapport")
{
string Example = Console.ReadLine();
}
}
這是TCP練習嗎?如果沒有,請使用更高級別的協議,例如Web服務或HTTP。 TCP編程非常困難。 – usr 2014-10-19 13:34:52
我只是想以有效的方式將數據從服務器發送到客戶端。 – PJDW 2014-10-19 15:12:39
首先,這看起來像兩個完全不同的問題:「使用哪個網絡API?」和「如何序列化數據?」他們是相關的,但不是真正相同的問題。其次,在現代C#程序中,我將使用第一個選項:使用TcpClient/TcpListener進行異步/等待。你可能會也可能不想精確地遵循這個例子,但它似乎是一個很好的起點。更重要的一點是,異步/等待提供了一個非常乾淨和簡單的方法來處理這種確切的情況。絕對不要使用線程示例;這是效率最低,可擴展性最低的方法。 – 2014-10-20 00:59:49