Logo

用C#搭建WebSocket

Pastore Antonio
Pastore Antonio 2024年02月23日
508 阅读 0 评论 约 4330 字 阅读约 9 分钟

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

今天在这里我会用C#搭建WebSocket服务端演示WebSocket的通信过程

一、WebSocket中的事件、属性和方法

  属性:

  Socket.readyState                   只读属性 readyState 表示连接状态,可以是以下值:
                                                0 - 表示连接尚未建立。
                                                1 - 表示连接已建立,可以进行通信。
                                                2 - 表示连接正在进行关闭。
                                                3 - 表示连接已经关闭或者连接不能打开。
  Socket.bufferedAmount         只读属性 bufferedAmount 已被 send() 放入正在队列中等待传输,但是还没有发出的 UTF-8 文本字节数

  事件:

  事件             事件处理程序               描述
  open         Socket.onopen              连接建立时触发    
  message        Socket.onmessage        客户端接收服务端数据时触发
  error         Socket.onerror             通信发生错误时触发    
  close         Socket.onclose             连接关闭时触发    

  方法:

  Socket.send()                     使用连接发送数据    
  Socket.close()                    关闭连接

二、有了大概的了解接下来就开始实现这么一个实例

  1.客户端

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
    </head>
    <body >
        <div style="margin-left: 650px;">
            <form id="Form"> 
                <input type="input" name="" id="SendInfo" value="" />
                <button type="submit">提交</button>
            </form>
    
            <div id="hello" style="border: dashed 1px black;height: 500px;width: 500px;margin-top: 10px;">
            
            </div>
        </div>
        
    </body>
    <script type="text/javascript">
        var test=function(){
            
            var print=document.getElementById('hello');
            var form = document.getElementById('Form');
            var input = document.getElementById('SendInfo');
            print.innerHTML += "connecting to server ..<br/>";        
            window.ws = new WebSocket('ws://localhost:9898/');      //监听webscoket服务端口
        
            //监听消息状态
            ws.onmessage=function(eve){
                print.innerHTML+=eve.data+'<br/>'
            }
            
            //监听链接状态
            ws.onopen=function(){
                print.innerHTML+='connection open <br/>'
            }
            
            //监听关闭状态
            ws.onclose = function () {
                print.innerHTML += 'connection closed<br/>';
            }

               //向服务器端发送消息
               form.addEventListener('submit',function(e){
                   e.preventDefault();
                   var val="客户端:"+input.value;
                   ws.send(val);
                   input.value="";
               })
               
        }
        
        window.onload=test();
    </script>
</html>

 

  2.服务端创建一个C#控制台程序

using Fleck;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace WebScoket
{
    class Program
    {
        static void Main(string[] args)
        {
            var allScokets = new List<IWebSocketConnection>();
            var server = new WebSocketServer("ws://127.0.0.1:9898");    //创建webscoket服务端实例
            server.Start(scoket=> {
                scoket.OnOpen = () =>                   
                {
                    Console.WriteLine("Open");
                    allScokets.Add(scoket);
                };
                scoket.OnClose = () =>
                {
                    Console.WriteLine("Close");
                    allScokets.Remove(scoket);
                };
                scoket.OnMessage =message => {
                    Console.WriteLine(message);
                    allScokets.ToList().ForEach(s=>s.Send(message));
                };
            });

            var input = Console.ReadLine();
            while (input != "exit")
            {
                foreach (var socket in allScokets.ToList())
                {
                    socket.Send("服务端:"+input);
                }
                input = Console.ReadLine();
            }

        }
    }
}

 

  3.运行效果

 

 

 

  

 

 

  

 

查看完整代码

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它

附件下载

共 1 个文件
1725049-20191017174703489-1250195368
PNG 12.4 KB
本文为原创文章,请注意保留出处!

探索AIGC相关的精彩内容,共 13 篇文章

你的工作流程,值得一个“全自动数字分身”:录制、截图、成文,一气呵成

一、一句话认识 TestFlow Recorder 在数字化工作环境中,如何准确记录操作步骤并生成清 ... 用C#搭建WebSocket

2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南

用户需求 问题:有没有适合配置 Flowise 的前端框架? 目标:寻找类似 Open WebUI ... 用C#搭建WebSocket

2026-02-14 · Xzavier Aaron
高效AI故障诊断实践:提升企业运维能力

规划阶段 在现代企业的故障诊断过程中,规划阶段是确保诊断工作顺利开展的关键环节。通过系统化的规划,不 ... 用C#搭建WebSocket

2026-02-14 · Shen, Luke
​​AI的下半场:智能体(Agent)将如何重塑我们所有的应用?

一、什么是智能体(Agent)? 近年来,智能体(Agent)逐渐成为人工智能领域的热门话题。它不仅 ... 用C#搭建WebSocket

2026-02-14 · Shen, Luke