LiteNetLib WinForm Demo

环境: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);
            }
        }
    }
}
相关推荐
lzhdim31 分钟前
100条常用SQL语句
数据库·sql·mysql·mybatis
天河归来31 分钟前
从原始消息到业务数据:三层数据架构的设计与实践
数据库·数据仓库·架构
数据库小学妹1 小时前
金融数据库成本怎么算?五笔钱加一张TCO表
数据库·金融行业·数据库选型·国产化替代·tco·金融数据库
KaiwuDB1 小时前
KaiwuDB 分布式集群扩缩容,从原理到完整操作踩坑总结
运维·数据库·分布式
auspicious航1 小时前
PostgreSQL的备份与恢复
数据库·postgresql
这个DBA有点耶2 小时前
从 MySQL 到时序数据库:我帮朋友做迁移的完整记录
数据库·架构·dba
泡海椒2 小时前
深度解析JQuick-SQL AST到逻辑计划转换机制|分布式SQL原理
数据库·分布式·sql
心静财富之门2 小时前
Python 数据共享四种方案完整实例(同进程 / JSON / Redis / HTTP)
数据库·python·oracle
略略略咯咯2 小时前
啊啊啊啊啊
java·服务器·数据库
奇牙coding2 小时前
GPT-5.5 报 401 invalid_api_key 怎么办?换密钥前按 4 层排查请求头、项目权限和端点
数据库·gpt·ios·ai