.NET网络库

3
我一直在寻找一个不错的C#网络库。 它将与XNA 3.1和.NET Framework 3.5一起使用。 多人游戏的模式将是服务器和客户端。 目前,我一直在研究Lidgren Library Network,但它似乎已经过时了。
有没有人对一个好的网络库有什么好的建议?它应该能够轻松处理30个以上的客户端连接。

如果这个库是用VB.NET编写的,那可以吗? - John Saunders
@John Saunders:如果该库是一个编译好的 .Net 程序集,它将会是 CIL 格式,因此源语言是什么并不重要。 - Callum Rogers
1
@Callum:谢谢,我知道这个。我问Mark是因为他要求一个“C#网络库”。 - John Saunders
1
他要求一个用于C#的网络库,而不是用C#编写的库。 - Erik Funkenbusch
7个回答

11
尽管您可以自己编写所有低级网络代码,但使用库绝对是节省大量时间和压力的好方法,这些时间可以更好地用于改进自己的应用程序。
这里还没有提到的一个库是networkComms.net。它拥有大量复杂的功能(例如序列化、压缩和加密),但鉴于您特别提到连接数,它能够处理1000多个连接,传输速率为1Gbps+。有一篇简单的文章如何创建快速客户端服务器应用程序,但简要地说,您可以按以下方式发送和接收。
要发送:
//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
你的所有帖子几乎都是宣传你的网站,而且没有透露这个事实。 - Andrew Barber
@AndrewBarber - 就记录而言,我是networkComms.net的开发人员之一。我从未试图隐瞒这一点,现在我将修改我的个人资料以澄清这一点。 - MarcF
4
请务必仔细阅读《自我推广常见问题解答》(http://stackoverflow.com/faq#promotion)。特别是要看到其中的一部分,即如果你的许多帖子都是宣传性质的,那么你可能来到这里的目的是错误的。同时,请注意每次链接到自己的网站或产品时,*必须*发布免责声明。 - Andrew Barber
@AndrewBarber - 我明白了,我不知道有免责声明的要求。 - MarcF
你有回声客户端服务器的示例吗? - Syaiful Nizam Yahya
4
为付费图书馆网站做广告,该网站在“下载”链接后隐藏了它是一个付费图书馆的事实,而该链接会带你到一个“请选择套餐!”页面,并列出了不同价格……我希望它不要试图在快速浏览时隐藏这个事实,而是有一个“购买”链接。 - NeroS

3

Lidgren库非常可靠,我已经在生产环境中成功使用过! - Brett
2
Lidgren现在正在迁移到Github:https://github.com/lidgren/lidgren-network-gen3 - ANeves

2

你似乎在错误的地方寻找。你似乎没有查找.NET Framework本身。

那使用WCF呢?那使用 TcpListener 呢?

这些都不能满足你的需求吗?


2

WCF是一种可能的选择,尽管对于此情景来说可能有些笨重。.NET Sockets则通常过于低级;它们不是一个容易“插入”的组件(在使用Socket类之前必须学好网络和多线程)。

我编写了一个库,Nito.Async.Sockets,它是Nito.Async的一部分。它从套接字编程中去除了多线程考虑,并且还包括一个更高级别的抽象,可以处理消息分帧保持连接


截至目前,我不建议使用Nito.Async(v1)。引用自Nito.Async网站:“当前的Nito.Async.Sockets API已经被冻结。将开发一个新的(v2)API,该API提供更好的协议组件分离(例如,消息框架类型、保持活动系统等都是正交的)。新的API可能基于Rx框架,但更有可能与.NET 4.0任务并行库相关联。” - Syaiful Nizam Yahya
Nito.Async.Sockets仍然可用;v2 API已经计划了多年,但我只是没有时间去做它。 - Stephen Cleary

2

1

你是否尝试过在System.Net中找到的内置 .Net 库?非常不可能你需要使用任何外部库。这里有一个简单的多线程 TCP 服务器示例,你也可以看一下 UDP。如果你稍微谷歌一下就会发现有很多教程。

尝试查看System.Net.SocketsMSDN页面以获取更多信息。


虽然原生的套接字库可能对一些人来说已经足够了,但那些不喜欢高效管理资源的人要么寻找网络库,要么准备编写大量的资源管理代码(如扩展、最小化垃圾回收器、多线程、负载平衡、网络错误处理等)。 - Syaiful Nizam Yahya

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接