国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Winform中使用Websocket4Net實現(xiàn)Websocket客戶端并定時存儲接收數(shù)據(jù)到SQLite中

這篇具有很好參考價值的文章主要介紹了Winform中使用Websocket4Net實現(xiàn)Websocket客戶端并定時存儲接收數(shù)據(jù)到SQLite中。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

場景

SpringBoot+Vue整合WebSocket實現(xiàn)前后端消息推送:

SpringBoot+Vue整合WebSocket實現(xiàn)前后端消息推送_websocket vue3.0 springboot 往客戶端推送-CSDN博客

上面實現(xiàn)ws推送數(shù)據(jù)流程后,需要在windows上使用ws客戶端定時記錄收到的數(shù)據(jù)到文件中,這里

文件使用SQLite數(shù)據(jù)庫進行存儲。

Winform中操作Sqlite數(shù)據(jù)增刪改查、程序啟動時執(zhí)行創(chuàng)建表初始化操作:

Winform中操作Sqlite數(shù)據(jù)增刪改查、程序啟動時執(zhí)行創(chuàng)建表初始化操作_winform sqllite-CSDN博客

Sqlite的操作參考如上。

注:

博客:
霸道流氓氣質(zhì)_C#,架構(gòu)之路,SpringBoot-CSDN博客

實現(xiàn)

1、引入WebSocket4Net依賴

使用Nuget搜索并安裝WebSocket4Net

websocket發(fā)送消息,并將消息存放到數(shù)據(jù)庫,C#,websocket,sqlite,網(wǎng)絡(luò)協(xié)議

2、設(shè)計頁面布局如下

websocket發(fā)送消息,并將消息存放到數(shù)據(jù)庫,C#,websocket,sqlite,網(wǎng)絡(luò)協(xié)議

3、websocket客戶端實現(xiàn)

聲明客戶端對象

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地址的校驗,只關(guān)注中間ws相關(guān)的代碼

??????????????? 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();

然后編寫其各種事件的具體實現(xiàn)。

實現(xiàn)方法中具體邏輯根據(jù)業(yè)務(wù)進行確定。

建立連接事件實現(xiàn)

??????? private void WebSocket4Net_Opened(object sender, EventArgs e)
??????? {
??????????? //允許跨線程調(diào)用
??????????? Control.CheckForIllegalCrossThreadCalls = false;
??????????? textBox_log.AppendText(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":ws建立連接成功");
??????????? textBox_log.AppendText("\r\n");
??????????? //向服務(wù)端發(fā)送消息
??????????? //webSocket4NetClient.Send("Client準(zhǔn)備發(fā)送數(shù)據(jù)!");
??????? }

收到消息事件實現(xiàn)

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

出錯事件實現(xiàn)

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

連接關(guān)閉事件實現(xiàn)

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

ws連接關(guān)閉按鈕點擊實現(xiàn)

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

4、定時存儲實現(xiàn)

在上面收到消息時將數(shù)據(jù)賦值給變量

receviceString

聲明變量

private string receviceString = String.Empty;

添加Timer定時器

Timer _timer = new Timer();

定時存儲按鈕點擊事件實現(xiàn)

??????? 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 {
??????????????? //清空數(shù)據(jù)庫
??????????????? 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") + ":定時存儲已經(jīng)啟動!!");
??????????????? textBox_log.AppendText("\r\n");
??????????? }
??????? }

首先判斷ws是否連接上,如果連接上則將庫清空,然后獲取設(shè)置的定時頻率并啟動定時器

定時器具體實現(xiàn)

??????? 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數(shù)據(jù)并存儲進數(shù)據(jù)庫
??????????????????????? TimeSpan ts = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
??????????????????????? string timeSpan = Convert.ToInt64(ts.TotalSeconds).ToString();
??????????????????????? //插入數(shù)據(jù)
??????????????????????? 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") + ":定時存儲執(zhí)行異常:" + exception.Message);
??????????????? textBox_log.AppendText("\r\n");
??????????? }????????
??????? }

首頁也要判斷是否連接,然后判斷receviceString是否為空,避免ws未傳輸數(shù)據(jù),會定時存儲空數(shù)據(jù)。

不為空則將時間和收到的數(shù)據(jù)存儲進數(shù)據(jù)庫。

停止定時存儲按鈕點擊事件

??????? 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") + ":定時存儲已經(jīng)停止!!!");
??????????? textBox_log.AppendText("\r\n");
??????????? receviceString = String.Empty;
??????? }

5、運行效果

websocket發(fā)送消息,并將消息存放到數(shù)據(jù)庫,C#,websocket,sqlite,網(wǎng)絡(luò)協(xié)議文章來源地址http://www.zghlxwxcb.cn/news/detail-835054.html

到了這里,關(guān)于Winform中使用Websocket4Net實現(xiàn)Websocket客戶端并定時存儲接收數(shù)據(jù)到SQLite中的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • c# Log4net使用介紹

    注意:將log4net.config的屬性“復(fù)制到輸出目錄”設(shè)置為“始終復(fù)制” Log4net 是一個用于 .NET 平臺的日志記錄框架,它可以幫助開發(fā)者在應(yīng)用程序中記錄和管理日志信息,以便于調(diào)試和監(jiān)控應(yīng)用程序的運行情況。下面是 Log4net 的配置和使用過程及案例: 安裝 log4net 可以通過 Nu

    2024年02月02日
    瀏覽(22)
  • C# .Net Core log4net 使用方法

    一、背景 前排提示,覺得墨跡的朋友可以直接看解決方法部分! 啊,許久沒有這般耗時耗力了。。。鼓搗了一下午,不斷地查閱資料,終于成功把log4net配置成功了。不過,筆者對log4net的底層并不了解,這里只是簡單記錄學(xué)習(xí)過程,給同樣的初學(xué)者提供些許方便。 二、探索

    2024年02月04日
    瀏覽(19)
  • Asp.Net 使用Log4Net (SQL Server)

    首先,在你的SQL Server數(shù)據(jù)庫中創(chuàng)建一個用于存儲日志的表。以下是一個簡單的表結(jié)構(gòu)示例: 修改Log4Net配置文件(Log4Net.config),將 RollingLogFileAppender 替換為 AdoNetAppender 。配置 AdoNetAppender 以連接到數(shù)據(jù)庫并將日志數(shù)據(jù)插入到上述創(chuàng)建的數(shù)據(jù)庫表中。 注意 bufferSize value=\\\"10\\\"/ ,

    2024年02月15日
    瀏覽(44)
  • .NET Core WebAPI中使用Log4net記錄日志
  • .NetCore之log4net的使用

    .NetCore之log4net的使用

    1.首先下載log4ne的包: 2.添加配置文件log4net.config 3.添加日志幫助類 4.在服務(wù)中采用單例生命周期注入 5.添加全局異常過濾器 6.注入過濾器服務(wù) 7.使用 日志截圖:

    2024年02月11日
    瀏覽(25)
  • AI面試官:Asp.Net 中使用Log4Net (二)

    當(dāng)面試涉及到使用log4net日志記錄框架的相關(guān)問題時,通常會聚焦在如何在.NET或.NET Core應(yīng)用程序中集成和使用log4net。以下是一些關(guān)于log4net的面試題目,以及相應(yīng)的解答、案例和代碼: 解答:可以使用log4net的多個appender來實現(xiàn)將日志信息同時輸出到文件和數(shù)據(jù)庫。可以配置一

    2024年02月15日
    瀏覽(24)
  • .net core 6 使用注解自動注入實例,無需構(gòu)造注入 autowrite4net

    .net core 6 使用注解自動注入實例,無需構(gòu)造注入 autowrite4net

    像java使用@autowrite一樣使用 1、前提先注冊到ioc容器當(dāng)中 ????????builder.Services.AddScoped 2、nuget引入AutoWrite4Net 3、啟用 4、在類上使用注解 5、實例上使用注解 6、即可直接使用,且在使用AddScoped方式注入的實例也保持生命周期不發(fā)生變化 7、出現(xiàn)System.InvalidOperationException:“*

    2024年01月23日
    瀏覽(16)
  • .NET Core WebAPI中使用Log4net 日志級別分類并記錄到數(shù)據(jù)庫

    .NET Core WebAPI中使用Log4net 日志級別分類并記錄到數(shù)據(jù)庫

    記錄日志為文檔 記錄日志到數(shù)據(jù)庫

    2024年02月20日
    瀏覽(85)
  • 【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件詳細說明

    【C#】.net core 6.0 使用第三方日志插件Log4net,配置文件詳細說明

    歡迎來到《小5講堂》 大家好,我是全棧小5。 這是《C#》系列文章,每篇文章將以博主理解的角度展開講解, 特別是針對知識點的概念進行敘說,大部分文章將會對這些概念進行實際例子驗證,以此達到加深對知識點的理解和掌握。 溫馨提示:博主能力有限,理解水平有限

    2024年04月12日
    瀏覽(29)
  • Asp.Net 6.0集成 Log4Net

    Asp.Net 6.0集成 Log4Net

    需要安裝NuGet包,明細如下: log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore 文件名稱 log4net.config ,默認可以放在與啟動類 Program.cs 同級目錄下 在啟動類中進行配置(Program.cs)

    2024年02月07日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包