2010-05-22 55 views
4

我一直在尋找一個體面的C#網絡庫。它將與XNA 3.1和.NET Framework 3.5一起使用。 多玩家風格將成爲服務器和客戶端。 目前我一直在尋找Lidgren Library Network,但它似乎過時了。.NET網絡庫

任何人都有一個好的網絡圖書館的建議。它應該能夠一次處理30個以上的客戶端連接。

+0

如果圖書館是用VB.NET編寫的,它會好嗎? – 2010-05-22 12:16:07

+0

@John Saunders:如果庫是一個編譯過的a。網絡彙編,它將在CIL中,所以它不會影響源語言。 – 2010-05-22 12:32:03

+1

@Callum:謝謝,我知道。我問Mark,因爲他要求一個「C#網絡庫」。 – 2010-05-22 15:20:25

回答

3

您的鏈接確實已過時;但是如果您閱讀該頁面,它將引導您訪問新版本:http://code.google.com/p/lidgren-network-gen3/

+0

lidgren圖書館是堅實的,我用它在一個成功的生產環境! – Brett 2012-09-21 01:26:47

+2

Lidgren現在正在遷移到github上:https://github.com/lidgren/lidgren-network-gen3 – ANeves 2015-01-29 12:01:05

1

您似乎正在尋找錯誤的地方。您似乎沒有查看.NET Framework本身。

如何使用WCF?那麼使用TcpListener怎麼樣?

你需要什麼,這些不提供?

1

您是否嘗試過在System.Net中找到的內置.Net庫?根本不需要使用外部庫。 Here's一個簡單的線程化TCP服務器的例子,你也可能想看看UDP。如果你只是谷歌了一下,有很多教程。

嘗試查看System.Net.SocketsMSDN page瞭解更多信息。

+0

雖然vanilla套接字庫對某些人來說足夠了,但不想有效管理資源的人應該查找網絡庫或準備編寫大量資源管理代碼(縮放,最小化垃圾回收器,多線程,負載平衡,網絡錯誤處理等)。 – 2014-01-02 05:36:54

2

WCF是一種可能性,雖然它可能對這種情況有點重量級。 .NET套接字OTOH通常太低級;它們並不是一個簡單的「組件」,只需要插入即可(在Socket類可以正確使用之前,網絡和多線程都必須很好地學習)。

我寫了一個庫,Nito.Async.Sockets,它是Nito.Async的一部分。它從套接字編程中刪除了多線程的考慮因素,還包含處理message framingkeepalives的更高級抽象。

+0

在撰寫本文時我不會推薦Nito.Async(v1)。來自Nito.Async站點的引用「當前的Nito.Async.Sockets API已被凍結,將開發一個新的(v2)API,它可以更好地分離協議組件(例如,消息幀類型,存儲系統等)都是正交的),新的API可能基於Rx框架,但更有可能被綁定到.NET 4.0 Task Parallel Library中。「 – 2014-01-02 05:33:59

+0

Nito.Async.Sockets仍然可用; v2 API已經計劃好幾年了,但我沒有時間去做。 – 2014-01-02 11:08:15

10

雖然沒有什麼能夠阻止您自己編寫所有低級網絡代碼,但使用庫絕對是一種節省時間的好方法和壓力,你可以更好地花費改進自己的應用程序的時間。

這裏沒有提到的圖書館是networkComms.net。它具有許多複雜的功能(例如序列化,壓縮和加密),但只要提到您提及的連接數量,它就能夠處理1000個連接,傳輸速率爲1Gbps +。有一篇關於how to create a quick client server application的簡單文章,但簡而言之,您可以發送和接收如下。

派:

//This is the simplest way to send with more advanced options also available 
//Parameters are message type, IP address, port and the object to send 
NetworkComms.SendObject("Message", "127.0.0.1", 10000, "Networking in one line!") 

要接收:

//We need to define what happens when packets are received. 
//To do this we add an incoming packet handler for 
//a 'Message' packet type. 
// 
//This handler will automatically convert the incoming raw bytes into a string 
//(this is what the <string> bit does) and then write that string to the 
//local console window. 
NetworkComms.AppendGlobalIncomingPacketHandler<string>("Message", (packetHeader, connection, incomingString) => { Console.WriteLine("\n ... Incoming message from " + connection.ToString() + " saying '" + incomingString + "'."); }); 

//Start listening for incoming 'TCP' connections. The true 
//parameter means try to use the default port and if that 
//fails just choose a random port. 
//See also UDPConnection.StartListening() 
TCPConnection.StartListening(true); 

免責聲明:我的開發人員爲這個圖書館之一。

+2

您的所有帖子都是您的網站的廣告,而且他們都沒有透露這一事實。 – 2013-02-11 17:36:59

+0

@AndrewBarber - 爲了記錄,我是networkComms.net的開發人員之一。我從來沒有試圖隱瞞,我會修改我的個人資料,以澄清現在。 – MarcF 2013-02-11 17:43:28

+3

請務必仔細閱讀[自助推廣常見問題](http://stackoverflow.com/faq#promotion)。具體來說,如果您的帖子很多都是促銷活動,請參閱其中說明的部分,您可能是出於錯誤原因在此處。另請注意,每次鏈接到您自己的網站/產品時,您都必須*發佈免責聲明。 – 2013-02-11 17:44:48