环境:VS2026, .Net10 , WinForm。豆包太厉害,几个小时引导我完成了这个Demo.

Server端代码:
cs
using LiteNetLib;
using LiteNetLib.Utils;
namespace LiteNetServer
{
public partial class Form1 : Form
{
// LiteNetLib 服务端
private NetManager server;
private EventBasedNetListener listener;
private Dictionary<int, NetPeer> clients = new Dictionary<int, NetPeer>();
public Form1()
{
InitializeComponent();
if (server != null)
{
ps("服务器已启动!");
return;
}
listener = new EventBasedNetListener();
listener.ConnectionRequestEvent += OnConnectionRequest;
listener.PeerConnectedEvent += OnPeerConnected;
listener.PeerDisconnectedEvent += OnPeerDisconnected;
listener.NetworkReceiveEvent += OnNetworkReceive;
server = new NetManager(listener);
server.Start(9050); // 端口
ps("服务已启动,端口:" + 9050);
Task.Run(Thread1);
}
private void button1_Click(object sender, EventArgs e)
{
if (clients.TryGetValue(int.Parse(textBox1.Text), out NetPeer peer) && peer.ConnectionState == ConnectionState.Connected)
{
NetDataWriter writer = new NetDataWriter();
writer.Put(textBox2.Text);
peer.Send(writer, DeliveryMethod.ReliableOrdered);
ps("向客户端ID:" + textBox1.Text + " 发送:" + textBox2.Text);
}
else
{
ps("无法发送给客户端ID:" + textBox1.Text);
}
}
void Thread1()
{
while (true)
{
Task.Delay(200).Wait();
server?.PollEvents();
}
}
// 连接请求
private void OnConnectionRequest(ConnectionRequest request)
{
request.AcceptIfKey("KEY20260601");
ps("收到客户端连接请求");
}
// 客户端连接
private void OnPeerConnected(NetPeer peer)
{
clients[peer.Id] = peer;
ps("客户端已连接,ID:" + peer.Id);
}
// 客户端断开
private void OnPeerDisconnected(NetPeer peer, DisconnectInfo info)
{
if (clients.ContainsKey(peer.Id))
clients.Remove(peer.Id);
ps("客户端断开,ID:" + peer.Id + " 原因:" + info.Reason);
}
// 接收消息
private void OnNetworkReceive(NetPeer peer, NetPacketReader reader, byte channel, DeliveryMethod method)
{
string msg = reader.GetString();
ps("收到客户端消息,ID:" + peer.Id + ": " + msg);
}
// 安全添加日志(跨线程)
private void ps(string text)
{
if (listBox1.InvokeRequired)
{
listBox1.Invoke(new Action(() => listBox1.Items.Add("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + text)));
}
else
{
listBox1.Items.Add("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + text);
}
}
}
}
Client端代码:
cs
using LiteNetLib;
using LiteNetLib.Utils;
using Microsoft.VisualBasic.Logging;
namespace LiteNetClient
{
public partial class Form1 : Form
{
private NetManager client;
private EventBasedNetListener listener;
private NetPeer peer;
public Form1()
{
InitializeComponent();
if (client != null)
{
ps("已经连接!");
return;
}
listener = new EventBasedNetListener();
listener.PeerConnectedEvent += OnConnected;
listener.PeerDisconnectedEvent += OnDisconnected;
listener.NetworkReceiveEvent += OnReceive;
client = new NetManager(listener);
client.Start();
// 连接本地服务器(IP 127.0.0.1 端口 9050)
peer = client.Connect("127.0.0.1", 9050, "KEY20260601");
ps("正在连接服务器...");
Task.Run(Thread1);
}
private void button1_Click(object sender, EventArgs e)
{
if (peer == null || peer.ConnectionState != ConnectionState.Connected)
{
ps("未连接服务器!");
return;
}
NetDataWriter writer = new NetDataWriter();
writer.Put(textBox1.Text);
peer.Send(writer, DeliveryMethod.ReliableOrdered);
ps("发送:" + textBox1.Text);
}
void Thread1()
{
while (true)
{
Task.Delay(200).Wait();
client?.PollEvents();
}
}
// 连接成功
private void OnConnected(NetPeer peer)
{
ps("连接服务器成功!");
}
// 断开连接
private void OnDisconnected(NetPeer peer, DisconnectInfo info)
{
ps("断开连接:" + info.Reason);
}
// 收到消息
private void OnReceive(NetPeer peer, NetPacketReader reader, byte channel, DeliveryMethod method)
{
string msg = reader.GetString();
ps("收到:" + msg);
}
private void ps(string text)
{
if (listBox1.InvokeRequired)
{
listBox1.Invoke(new Action(() => listBox1.Items.Add("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + text)));
}
else
{
listBox1.Items.Add("[" + DateTime.Now.ToString("HH:mm:ss") + "] " + text);
}
}
}
}