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);
            }
        }
    }
}
相关推荐
像风一样自由202014 分钟前
29.Redis在大模型应用中有哪些用途缓存会话与限流
数据库·人工智能·redis·缓存·大模型·milvus·智能体
robottt6661 小时前
2026国产协作机器人排名与选型指南:越疆、遨博、节卡、珞石解析
大数据·数据库·人工智能
郑州光合科技余经理1 小时前
本地生活系统:多业务订单字段怎么分账本导出
java·开发语言·前端·数据库·uni-app·php·ai编程
weixin_460443564 小时前
考试监控大屏为什么不能直接查数据库?WebSocket、Redis与实时数据聚合架构设计
数据库·redis·在线考试系统·培训考试系统·煤矿培训考试系统·煤矿在线考试系统·宏远培训考试系统
风哥2号4 小时前
数据库教程FGMT02‑生产环境Linux+Oracle19c安装配置与项目实战
linux·数据库·ffmpeg
九皇叔叔8 小时前
【第二章】Redis基础入门:Redis是什么、为什么快以及核心特性详解
数据库·redis·缓存
云和恩墨9 小时前
删库不跑路,回滚极速触达——zData S“旁路日志”持续保护原理深剖
数据库
MetaLite9 小时前
SpringBoot接口分层规范-外网网关内部服务与参数边界
java·数据库·spring boot
Wang's Blog11 小时前
Java框架快速入门: Spring Security+OAuth2之元注解简化权限表达式
java·数据库·spring
蓝速科技13 小时前
医院导诊 AI 数字人一体机场景适配与落地指南丨蓝速科技
运维·数据库·人工智能·科技·自然语言处理·技术分享