第九节 树莓派上.NET环境下搭建局域网TCP服务器

在树莓派上搭建局域网TCP服务器

代码框架搭建

前面我们已经搭建了.NET的环境,那么我们直接开始搭建局域网TCP服务器。

  • 这里TCP服务器的搭建依赖的是一个.net的开源架构RRQM,是一款非常优秀的框架,高性能、高并发完全符合学习和生产的需求,项目地址:https://gitee.com/dotnetchina/RRQMSocket.大家可以去学习,这里就不介绍了,有详细的中文使用文档。
  • 安装和使用
    我们还是基于前两节使用过的工程,先获取NuGet的程序包,直接搜索rrqm安装
    在这里插入图片描述
  1. 移植代码
    参考官方的文档
    在这里插入图片描述
    直接将代码复制到程序里,移植完如下
using RRQMSocket;
using System;
using System.Device.Gpio;
using System.IO.Ports;
using System.Text;
using System.Threading;

namespace RaspberryTest
{
    class Program
    {
        public static SerialPort serialPort1 = new();//注册串口
        static void Main(string[] args)
        {

            Console.WriteLine("Hello World!");

            /*------------------------------------------GPIO设置-------------------------------------------*/
            Console.WriteLine("Blinking LED. Press Ctrl+C to end.");
            int pin = 27;
            using var controller = new GpioController();
            controller.OpenPin(pin, PinMode.Output);  //输出模式
            //controller.OpenPin(pin, PinMode.Input); //输入模式
            bool ledOn = true;

            /*------------------------------------------串口设置-------------------------------------------*/
            serialPort1.DataReceived += new SerialDataReceivedEventHandler(serialPort1_DataReceived); //串口接受注册

            string[] coms = SerialPort.GetPortNames();//获取串口号

            for (int i = 0; i < coms.Length; i++)
            {
                Console.WriteLine(coms[i]);//打印出口号
            }

            serialPort1.PortName = "/dev/ttyAMA2"; //串口好,相当于Windows下的COM口
            serialPort1.BaudRate = 115200; //波特率

            serialPort1.Open(); //打开串口

            /*--------------------------------------TCP服务器配置----------------------------------------*/
            TcpService service = new TcpService();
            service.Connecting += (client, e) => { };//有客户端正在连接
            service.Connected += (client, e) => { };//有客户端连接
            service.Disconnected += (client, e) => { };//有客户端断开连接
            service.Received += (client, byteBlock, requestInfo) =>
            {
                //从客户端收到信息
                string mes = Encoding.UTF8.GetString(byteBlock.Buffer, 0, byteBlock.Len);
                Console.WriteLine($"已从{client.ID}接收到信息:{mes}");//

                client.Send(mes);//将收到的信息直接返回给发送方

                //client.Send("id",mes);//将收到的信息返回给特定ID的客户端

                //var clients = service.GetClients();
                //foreach (var targetClient in clients)//将收到的信息返回给在线的所有客户端。
                //{
                //    if (targetClient.ID != client.ID)
                //    {
                //        targetClient.Send(mes);
                //    }
                //}
            };

            service.Setup(new RRQMConfig()//载入配置     
                .SetListenIPHosts(new IPHost[] { new IPHost("192.168.9.100:7789"), new IPHost(7790) })//同时监听两个地址
                .SetMaxCount(10000)
                .SetThreadCount(100))
                .Start();//启动


            while (true)
            {
                controller.Write(pin, ((ledOn) ? PinValue.High : PinValue.Low));  //控制输出电平
                //controller.Read(pin); //读取输入电平
                ledOn = !ledOn;

                Thread.Sleep(1000);

                serialPort1.Write("I'm OK!");
            }
        }

        private static void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)//串口数据接受
        {
            Console.WriteLine(serialPort1.ReadExisting());//打印串口接收
        }
    }
}

在这里插入图片描述
2. 本机运行测试

可以先在本机测试,将上面的IP地址换为自己电脑的IP,然后运行,例如我的电脑IP是192.168.9.116
在这里插入图片描述
运行程序前注意将gpio设置和串口设置部分的代码注释掉,因为这部分是为树莓派设置的,在电脑上运行会出错。
在这里插入图片描述
注释while里面的东西,留下延时。在这里插入图片描述

然后运行启动监听,使用网络助手连接,用网络助手发送数据,查看效果,可以让局域网的其他小伙伴一起连接测试效果。
在这里插入图片描述
这里说明局域网内简单的TCP服务器搭建成功了。

运行测试

  1. 上面本机测试完成就可以移植到树莓派上面了
  • 移植前先将上面注释的GPIO设置与串口设置部分代码取消注释。
  • 查看树莓派的局域网IP地址,更改代码
    在这里插入图片描述
    我的树莓派是192.168.9.100,你用的有线那么就是eth0的,注意网卡,更改完代码里的地址,就是这一节刚开始我贴的代码,然后右键项目重新生成。
  • 和前两节一样,将工程目录下的net5.0文件夹传输到树莓派,在net5.0文件夹下开始运行。
dotnet RaspberryTest.dll

使用网络助手连接测试,注意测试电脑和树莓派在同一个局域网下面。
在这里插入图片描述
测试成功。这只是简单的示例,具体功能和项目生产中需要考虑其他的因素和业务逻辑。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哆啦A不做梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值