2010-05-22 73 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