Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中

这篇具有很好参考价值的文章主要介绍了Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

场景

SpringBoot+Vue整合WebSocket实现前后端消息推送:

SpringBoot+Vue整合WebSocket实现前后端消息推送_websocket vue3.0 springboot 往客户端推送-CSDN博客

上面实现ws推送数据流程后,需要在windows上使用ws客户端定时记录收到的数据到文件中,这里

文件使用SQLite数据库进行存储。

Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作:

Winform中操作Sqlite数据增删改查、程序启动时执行创建表初始化操作_winform sqllite-CSDN博客

Sqlite的操作参考如上。

注:

博客:
霸道流氓气质_C#,架构之路,SpringBoot-CSDN博客

实现

1、引入WebSocket4Net依赖

使用Nuget搜索并安装WebSocket4Net

websocket发送消息,并将消息存放到数据库,C#,websocket,sqlite,网络协议

2、设计页面布局如下

websocket发送消息,并将消息存放到数据库,C#,websocket,sqlite,网络协议

3、websocket客户端实现

声明客户端对象

public static WebSocket4Net.WebSocket webSocket4NetClient = null;

ws连接按钮的点击事件中

            try {
                var wsAddresss = textBox_ws_address.Text.Trim();
                webSocket4NetClient = new WebSocket4Net.WebSocket(wsAddresss);
                webSocket4NetClient.Opened += WebSocket4Net_Opened;
                webSocket4NetClient.Error += Websocket_Error;
                webSocket4NetClient.Closed += new EventHandler(Websocket_Closed);
                webSocket4NetClient.MessageReceived += WebSocket4Net_MessageReceived;
                webSocket4NetClient.Open();
                textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":ws开始连接");
                textBox_log.AppendText("\r\n");
            } catch (Exception exception) {
                textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":ws连接异常:"+ exception.Message);
                textBox_log.AppendText("\r\n");
            }

这里未添加对ws地址的校验,只关注中间ws相关的代码

                webSocket4NetClient = new WebSocket4Net.WebSocket(wsAddresss);
                webSocket4NetClient.Opened += WebSocket4Net_Opened;
                webSocket4NetClient.Error += Websocket_Error;
                webSocket4NetClient.Closed += new EventHandler(Websocket_Closed);
                webSocket4NetClient.MessageReceived += WebSocket4Net_MessageReceived;
                webSocket4NetClient.Open();

然后编写其各种事件的具体实现。

实现方法中具体逻辑根据业务进行确定。

建立连接事件实现

        private void WebSocket4Net_Opened(object sender, EventArgs e)
        {
            //允许跨线程调用
            Control.CheckForIllegalCrossThreadCalls = false;
            textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":ws建立连接成功");
            textBox_log.AppendText("\r\n");
            //向服务端发送消息
            //webSocket4NetClient.Send("Client准备发送数据!");
        }

收到消息事件实现

        private void WebSocket4Net_MessageReceived(object sender, MessageReceivedEventArgs e)
        {
            //允许跨线程调用
            Control.CheckForIllegalCrossThreadCalls = false;
            //textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":收到消息:");
            //textBox_log.AppendText("\r\n");
            receviceString = e.Message;
        }

出错事件实现

        private void Websocket_Error(object sender, EventArgs e)
        {
            //允许跨线程调用
            Control.CheckForIllegalCrossThreadCalls = false;
            textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":Websocket_Error:"+e);
            textBox_log.AppendText("\r\n");
        }

连接关闭事件实现

        private void Websocket_Closed(object sender, EventArgs e)
        {
            //允许跨线程调用
            Control.CheckForIllegalCrossThreadCalls = false;
            textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":Websocket_Closed");
            textBox_log.AppendText("\r\n");
        }

ws连接关闭按钮点击实现

        private void button_ws_disconnec_Click(object sender, EventArgs e)
        {
            webSocket4NetClient.Close();
        }

4、定时存储实现

在上面收到消息时将数据赋值给变量

receviceString

声明变量

private string receviceString = String.Empty;

添加Timer定时器

Timer _timer = new Timer();

定时存储按钮点击事件实现

        private void button_start_store_Click(object sender, EventArgs e)
        {
            if (webSocket4NetClient.State != WebSocket4Net.WebSocketState.Open && webSocket4NetClient.State != WebSocket4Net.WebSocketState.Connecting)
            {
                textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":Websocket连接异常");
                textBox_log.AppendText("\r\n");
            }
            else {
                //清空数据库
                SQLiteDataReader reader = Global.Instance.sqlLiteHelper.ExecuteQuery("SELECT* FROM positions;");
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        Global.Instance.sqlLiteHelper.ExecuteQuery("DELETE FROM positions WHERE timestamp = " + reader.GetString(reader.GetOrdinal("timestamp")) + ";");
                    }
                }
                _timer.Interval = (int)numericUpDown_rate.Value;
                _timer.Tick += _timer_Tick;
                _timer.Start();
                textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":定时存储已经启动!!");
                textBox_log.AppendText("\r\n");
            }
        }

首先判断ws是否连接上,如果连接上则将库清空,然后获取设置的定时频率并启动定时器

定时器具体实现

        private void _timer_Tick(object sender, EventArgs e) {
            try
            {
                if (webSocket4NetClient.State != WebSocket4Net.WebSocketState.Open && webSocket4NetClient.State != WebSocket4Net.WebSocketState.Connecting)
                {
                    textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":Websocket连接异常");
                    textBox_log.AppendText("\r\n");
                }
                else {
                    if (!String.IsNullOrEmpty(receviceString))
                    {
                        //获取ws数据并存储进数据库
                        TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
                        string timeSpan = Convert.ToInt64(ts.TotalSeconds).ToString();
                        //插入数据
                        Global.Instance.sqlLiteHelper.InsertValues("positions", new string[] { timeSpan, receviceString });
                        receviceString = String.Empty;
                    }
                }
            }
            catch (Exception exception)
            {
                textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":定时存储执行异常:" + exception.Message);
                textBox_log.AppendText("\r\n");
            }        
        }

首页也要判断是否连接,然后判断receviceString是否为空,避免ws未传输数据,会定时存储空数据。

不为空则将时间和收到的数据存储进数据库。

停止定时存储按钮点击事件

        private void button_stop_store_Click(object sender, EventArgs e)
        {
            //停止定时器
            _timer.Tick -= _timer_Tick;
            _timer.Stop();
            textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":定时存储已经停止!!!");
            textBox_log.AppendText("\r\n");
            receviceString = String.Empty;
        }

5、运行效果

websocket发送消息,并将消息存放到数据库,C#,websocket,sqlite,网络协议文章来源地址https://www.toymoban.com/news/detail-835054.html

到了这里,关于Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • c# Log4net使用介绍

    注意:将log4net.config的属性“复制到输出目录”设置为“始终复制” Log4net 是一个用于 .NET 平台的日志记录框架,它可以帮助开发者在应用程序中记录和管理日志信息,以便于调试和监控应用程序的运行情况。下面是 Log4net 的配置和使用过程及案例: 安装 log4net 可以通过 Nu

    2024年02月02日
    浏览(67)
  • C# .Net Core log4net 使用方法

    一、背景 前排提示,觉得墨迹的朋友可以直接看解决方法部分! 啊,许久没有这般耗时耗力了。。。鼓捣了一下午,不断地查阅资料,终于成功把log4net配置成功了。不过,笔者对log4net的底层并不了解,这里只是简单记录学习过程,给同样的初学者提供些许方便。 二、探索

    2024年02月04日
    浏览(36)
  • Asp.Net 使用Log4Net (SQL Server)

    首先,在你的SQL Server数据库中创建一个用于存储日志的表。以下是一个简单的表结构示例: 修改Log4Net配置文件(Log4Net.config),将 RollingLogFileAppender 替换为 AdoNetAppender 。配置 AdoNetAppender 以连接到数据库并将日志数据插入到上述创建的数据库表中。 注意 bufferSize value=\\\"10\\\"/ ,

    2024年02月15日
    浏览(31)
  • .NET Core WebAPI中使用Log4net记录日志

    2024年02月20日
    浏览(28)
  • .NetCore之log4net的使用

    1.首先下载log4ne的包: 2.添加配置文件log4net.config 3.添加日志帮助类 4.在服务中采用单例生命周期注入 5.添加全局异常过滤器 6.注入过滤器服务 7.使用 日志截图:

    2024年02月11日
    浏览(30)
  • AI面试官:Asp.Net 中使用Log4Net (二)

    当面试涉及到使用log4net日志记录框架的相关问题时,通常会聚焦在如何在.NET或.NET Core应用程序中集成和使用log4net。以下是一些关于log4net的面试题目,以及相应的解答、案例和代码: 解答:可以使用log4net的多个appender来实现将日志信息同时输出到文件和数据库。可以配置一

    2024年02月15日
    浏览(34)
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net

    像java使用@autowrite一样使用 1、前提先注册到ioc容器当中         builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、启用 4、在类上使用注解 5、实例上使用注解 6、即可直接使用,且在使用AddScoped方式注入的实例也保持生命周期不发生变化 7、出现System.InvalidOperationException:“*

    2024年01月23日
    浏览(25)
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

    记录日志为文档 记录日志到数据库

    2024年02月20日
    浏览(37)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件详细说明

    欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《C#》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和掌握。 温馨提示:博主能力有限,理解水平有限

    2024年04月12日
    浏览(37)
  • Asp.Net 6.0集成 Log4Net

    需要安装NuGet包,明细如下: log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 文件名称 log4net.config ,默认可以放在与启动类 Program.cs 同级目录下 在启动类中进行配置(Program.cs)

    2024年02月07日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包