LiteNetLibLite reliable UDP library for Mono and .NET

联合创作 · 2023-09-29 11:41

LiteNetLib 1.0 indev


Lite reliable UDP library for .NET Framework 4.7.1, Mono, .NET Core 2.1, .NET Standard 2.0.


Discord chat: Discord


OLD BRANCH (and examples) for 0.9.x


Little Game Example on Unity


Documentation


Build


NuGet NuGet NuGet


Release builds GitHub (pre-)release


DLL build from master


( Warning! Master branch can be unstable! )


Donations are welcome and will help further development of this project.


https://www.buymeacoffee.com/revx


Features



  • Lightweight

    • Small CPU and RAM usage

    • Small packet size overhead ( 1 byte for unreliable, 4 bytes for reliable packets )


  • Simple connection handling

  • Peer to peer connections

  • Helper classes for sending and reading messages

  • Multiple data channels

  • Different send mechanics

    • Reliable with order

    • Reliable without order

    • Reliable sequenced (realiable only last packet)

    • Ordered but unreliable with duplication prevention

    • Simple UDP packets without order and reliability


  • Fast packet serializer (Usage manual)

  • Automatic small packets merging

  • Automatic fragmentation of reliable packets

  • Automatic MTU detection

  • Optional CRC32C checksums

  • UDP NAT hole punching

  • NTP time requests

  • Packet loss and latency simulation

  • IPv6 support (dual mode)

  • Connection statisitcs

  • Multicasting (for discovering hosts in local network)

  • Unity support

  • Supported platforms:

    • Windows/Mac/Linux (.NET Framework, Mono, .NET Core, .NET Standard)

    • Lumin OS (Magic Leap)

    • Monogame

    • Godot

    • Unity 2018.3 (Desktop platforms, Android, iOS, Switch)



Unity notes!!!



  • Minimal supported Unity is 2018.3. For older Unity versions use 0.9.x library versions

  • Always use library sources instead of precompiled DLL files ( because there are platform specific #ifdefs and workarounds for unity bugs )


Usage samples


Client



EventBasedNetListener listener = new EventBasedNetListener();
NetManager client = new NetManager(listener);
client.Start();
client.Connect("localhost" /* host ip or name */, 9050 /* port */, "SomeConnectionKey" /* text key or NetDataWriter */);
listener.NetworkReceiveEvent += (fromPeer, dataReader, deliveryMethod) =>
{
Console.WriteLine("We got: {0}", dataReader.GetString(100 /* max length of string */));
dataReader.Recycle();
};

while (!Console.KeyAvailable)
{
client.PollEvents();
Thread.Sleep(15);
}

client.Stop();


Server



EventBasedNetListener listener = new EventBasedNetListener();
NetManager server = new NetManager(listener);
server.Start(9050 /* port */);

listener.ConnectionRequestEvent += request =>
{
if(server.ConnectedPeersCount < 10 /* max connections */)
request.AcceptIfKey("SomeConnectionKey");
else
request.Reject();
};

listener.PeerConnectedEvent += peer =>
{
Console.WriteLine("We got connection: {0}", peer.EndPoint); // Show peer ip
NetDataWriter writer = new NetDataWriter(); // Create writer class
writer.Put("Hello client!"); // Put some string
peer.Send(writer, DeliveryMethod.ReliableOrdered); // Send with reliability
};

while (!Console.KeyAvailable)
{
server.PollEvents();
Thread.Sleep(15);
}
server.Stop();

浏览 22
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

编辑 分享
举报