C#的WebSocket的使用案例


前言

WebSocket使用案例

使用包:WebSocketSharp-netstandard。可以通过NuGet管理程序添加哦。

一、Websocket是什么?

WebSocket是先通过Http进行一次握手,然后通过(全双工)TCP进行传输数据。话不多直接代码

二、使用步骤

1.服务端

两个类,一个WSocketl类,另一个WSocketHandle处理类

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocketSharp;
using WebSocketSharp.Server;

namespace WebSocketTest
{
    /// <summary>
    /// 服务端
    /// </summary>
  public  class WSocket
    {
        //WebSocket对象
        public WebSocketServer _socketServer = null;
        List<WebSocketServiceHost> webSocketServiceHosts;
        public delegate bool SendDatas(string sData);
        public  static event SendDatas SendDataEvent;
        public WSocket()
        {
            //实例化
            _socketServer = new WebSocketServer("ws://127.0.0.1:9988");
            //添加WebSocket的服务处理类
            _socketServer.AddWebSocketService<WSocketHandle>("/wsRobot");
            WebSocketServiceManager wSocketServiceManager = _socketServer.WebSocketServices;
            webSocketServiceHosts = wSocketServiceManager.Hosts.ToList();
        }
       
        /// <summary>
        /// 发送信息
        /// </summary>
        /// <param name="Data"></param>
        public void SendData(string Data)
        {
            //第一种触发方式发送
            // SendDataEvent?.Invoke(Data);
            //第二种获取到session会话对象发送
            var session = webSocketServiceHosts[0].Sessions;//获取到session会话对象
            var sessionIds = session.ActiveIDs;//获取会话的IDs
            foreach (var sessionId in sessionIds)
            {
                //发送
                session.SendToAsync(Data, sessionId, new Action<bool>(t =>
                {
                    if (!t)
                    {
                        Console.WriteLine("发送失败");
                    }
                }));
            }
        }
        /// <summary>
        /// 启动
        /// </summary>
        public void Start()
        {
            _socketServer.Start();
        }
        /// <summary>
        /// 停止
        /// </summary>
        public void Stop()
        {
            _socketServer.Stop();
        }
    }

///
    /// <summary>
    /// Websoket的信息处理类
    /// </summary>
    public class WSocketHandle:WebSocketBehavior
    {
        public WSocketHandle()
        {
            WSocket.SendDataEvent += SendDataEvent;
        }
        /// <summary>
        /// 关闭触发
        /// </summary>
        /// <param name="e"></param>
        protected override void OnClose(CloseEventArgs e)
        {
            Console.WriteLine("连接断开:目前连接人数" + Sessions.Count);

        }
        /// <summary>
        /// 连接触发
        /// </summary>
        protected override void OnOpen()
        {
            Console.WriteLine("连接成功:目前连接人数" + Sessions.Count);

        }
        /// <summary>
        /// 
        /// </summary>
        /// <param name="e"></param>
        protected override void OnError(ErrorEventArgs e)
        {
            Console.WriteLine("错误信息:" + e.Message);

        }
        /// <summary>
        /// 接收信息触发
        /// </summary>
        /// <param name="e"></param>
        protected override void OnMessage(MessageEventArgs e) 
        {
            string data = e.Data;
            Console.WriteLine(data);
        }
        /// <summary>
        /// 发送信息事件
        /// </summary>
        /// <param name="sData"></param>
        /// <returns></returns>
        public  bool SendDataEvent(string sData)
        {
            if(State== WebSocketState.Open)
            {
                if (Sessions.Count > 0)
                {
                    Send(sData);
                    return true;
                }
            }
            return false;
        }
    }
}

2.客户端

写了个简单的Html连接

<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
客户端:</br>
    <textarea id="textarea1" style="height: 500px; width: 300px;"></textarea>
    <input type="button" id="send" onclick="sendData()" value="快快快发送">
    
    <input type="text" id="message1">
    <script type="text/javascript">
        //检查浏览器是否支持WebSocket
        if (!window.WebSocket) {
            console.log('您的浏览器不支持WebSocket');
        }
        var el = document.getElementById("textarea1");
        var wsClient = new WebSocket('ws://127.0.0.1:9988/wsRobot');
        //发送
        function sendData() {
            var Text1 = document.getElementById("message1");
            wsClient.send( Text1 .value);
        }
       //连接
        wsClient.open = function (e) {
            el.value += "连接到了!\r\n";
        }
        wsClient.onclose = function (e) {
            el.value += "突然你就走了,断开了!\r\n";
        }
       //接收
        wsClient.onmessage = function (e) {
            console.log(wsClient);
            el.value += "接收的信息:" + e.data + "\r\n";
        }
        wsClient.onerror = function (e) {
            el.value += "连接失败!结果:" + e.data + "\r\n";
        }    </script>
</body>
</html>

总结

学习与快乐并进,只愿当下的我还是还是个阳光开朗的有那么点帅气的小伙子哈哈哈

  • 10
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用C#中的ClientWebSocket类连接WebSocket服务的基本步骤: 1. 引用命名空间System.Net.WebSockets。 2. 创建一个ClientWebSocket实例。 3. 使用ConnectAsync方法连接WebSocket服务。 4. 使用SendAsync方法发送消息到WebSocket服务。 5. 使用ReceiveAsync方法接收WebSocket服务发送的消息。 6. 使用CloseAsync方法关闭WebSocket连接。 下面是一个简单的示例代码: ```csharp using System; using System.Net.WebSockets; using System.Threading; using System.Threading.Tasks; public class WebSocketClient { private ClientWebSocket _webSocket; public async Task ConnectAsync(Uri uri) { _webSocket = new ClientWebSocket(); await _webSocket.ConnectAsync(uri, CancellationToken.None); } public async Task SendAsync(string message) { var buffer = new ArraySegment<byte>(System.Text.Encoding.UTF8.GetBytes(message)); await _webSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); } public async Task<string> ReceiveAsync() { var buffer = new ArraySegment<byte>(new byte[1024]); var result = await _webSocket.ReceiveAsync(buffer, CancellationToken.None); return System.Text.Encoding.UTF8.GetString(buffer.Array, 0, result.Count); } public async Task CloseAsync() { await _webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None); } } ``` 使用示例: ```csharp var client = new WebSocketClient(); await client.ConnectAsync(new Uri("ws://localhost:8080")); await client.SendAsync("Hello, WebSocket!"); var message = await client.ReceiveAsync(); Console.WriteLine(message); await client.CloseAsync(); ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值