基於H5的WebSocket簡單實例

来源:https://www.cnblogs.com/cc-net/archive/2018/08/15/9481713.html
-Advertisement-
Play Games

客戶端代碼: <html><head> <script> var socket; if ("WebSocket" in window) { var ws = new WebSocket("ws://127.0.0.1:8181"); socket = ws; ws.onopen = function ...


客戶端代碼:

 1 <html>
 2 <head>
 3 <script>
 4 var socket;
 5 if ("WebSocket" in window) {
 6 var ws = new WebSocket("ws://127.0.0.1:8181");
 7 socket = ws;
 8 ws.onopen = function() {
 9 console.log('連接成功');
10 };
11 ws.onmessage = function(evt) {
12 var received_msg = evt.data;    
13 document.getElementById("showMes").value+=evt.data+"\n";
14 };
15 ws.onclose = function() {
16 alert("斷開了連接");
17 };
18 } else {
19 alert("瀏覽器不支持WebSocket");
20 }
21 function sendMes(){
22 var message=document.getElementById("name").value+":"+document.getElementById("mes").value;
23 socket.send(message);
24 }
25 </script>
26 </head>
27 
28 <body>
29 <textarea rows="3" cols="30" id="showMes" style="width:300px;height:500px;"></textarea>
30 <br/>
31 <label>名稱</label>
32 <input type="text" id="name"/>
33 <br/>
34 <label>消息</label>
35 <input type="text" id="mes"/>
36 <button onclick="sendMes();">發送</button>
37 </body>
38 </html>

 

winform服務端代碼:

註:需先引入Fleck包

 

 

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Windows.Forms;
 5 using Fleck;
 6 
 7 namespace socketService
 8 {
 9 public partial class Form1 : Form
10 {
11 public Form1()
12 {
13 InitializeComponent();
14 CheckForIllegalCrossThreadCalls = false;
15 }
16 
17 private void Form1_Load(object sender, EventArgs e)
18 {
19 //保存所有連接
20 var allSockets = new List<IWebSocketConnection>();
21 //初始化服務端
22 var server = new WebSocketServer("ws://0.0.0.0:8181");
23 //開始監聽
24 server.Start(socket =>
25 {
26 //有客戶端連接觸發
27 socket.OnOpen = () =>
28 {
29 textBox3.Text += socket.ConnectionInfo.ClientIpAddress + " 連接 \r\n";
30 allSockets.Add(socket);
31 };
32 //有客戶端斷開觸發
33 socket.OnClose = () =>
34 {
35 textBox3.Text += socket.ConnectionInfo.ClientIpAddress + " 斷開連接 \r\n";
36 allSockets.Remove(socket);
37 };
38 //接收客戶端發送的消息
39 socket.OnMessage = message =>
40 {
41 textBox3.Text += socket.ConnectionInfo.ClientIpAddress + " 發送了消息:" + message + "\r\n";
42 //發送接收到的消息給所有客戶端
43 allSockets.ToList().ForEach(s => s.Send(message));
44 };
45 });
46 }
47 }
48 }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 塊級元素:獨占一行,其寬度自動填滿父元素的寬度,可以容納行內元素和其他塊級元素,可以設置margin和padding值。 行內元素:不會獨占一行,與其他行內元素排成一行,直到其父元素拍不下,才會從新一行開始。可以容納文本及其他行內元素,設置padding和margin值無效,行內元素的水平方向的pa ...
  • 前段時間換了份工作,也經歷了很多面試,最終通常都會撲在演算法上 雖說前端是所有程式員中,對於演算法的要求最低的一個崗位,但演算法依舊是進階的必修課 於是決定記錄一下與演算法相關的面試題,以後拿去面別人 一、面試題 問:有一個一百層的高樓,現在給你兩個完全一樣的玻璃球,去測出在哪一層樓把球扔出去,剛好能把玻璃 ...
  • Jquery內容 <script type="text/javascript"> $(function () { var num = 0; $(".box ol li:eq(0)").click(function () { $(":text").each(function () { num += p ...
  • 首先,JavaScript是一個單線程的腳本語言。所以就是說在一行代碼執行的過程中,必然不會存在同時執行的另一行代碼,就像使用alert()以後進行瘋狂console.log,如果沒有關閉彈框,控制台是不會顯示出一條log信息的。亦或者有些代碼執行了大量計算,比方說在前端暴力破解密碼之類的鬼操作,這 ...
  • onNodeCreated 回調,捕獲 DOM 創建完畢的回調,然後利用 zTree 的規則找到 treeNode.tId + "_a" 這樣的 標簽,自行添加 class 就是了 ...
  • 時隔一年左右,學習了新的知識,從嘗試Linux部署項目,網路安全,至後端開發,然後用起了Jquery, 而且是必須要做。也讓自己見識可能會更廣泛一些。對於一個剛畢業的大學生而言。方正我是沒有用過jquery, 儘管我有培訓學習過,也只是兩天時間,略有瞭解而已,工作中畫畫頁面肯定後期通過專業人士調,可 ...
  • 標簽內容 <div class="box"> 請編寫javascript代碼,完成如下功能要求:<br /> 1.取消覆選款後,要求促銷價格、促銷開始結束日期3個控制項不可用。<br /> 2.選中覆選框後,要求促銷價格、促銷開始結束日期3個控制項可用。 </div> <div class="box"> ...
  • jquery內容 <script> $(function () { $("dl dt").click(function () { $(this).siblings().toggle().parent().siblings().children("dd").hide(); }); }); </scri ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...