当前位置: 代码网 > it编程>编程语言>C# > C#实现websocket双向通信的示例代码

C#实现websocket双向通信的示例代码

2024年07月03日 C# 我要评论
一.服务端新建一个.net项目,如websocket.server安装包install-package websocketsharp -pre定义websockethelperusing caseau

一.服务端

新建一个.net项目,如websocket.server

安装包

install-package websocketsharp -pre

定义websockethelper

using caseauto.helper.websocket;
using system.collections.generic;
using websocketsharp.server;

namespace caseauto.helper
{
    public class websockethelper
    {
        static websocketserver wssv = new websocketserver("ws://127.0.0.1");
        private static dictionary<string,caseinfobehavior> clients = new dictionary<string,caseinfobehavior>();
        public static void init()
        {
            wssv.addwebsocketservice<caseinfobehavior>("/caseinfo",()=>new caseinfobehavior(clients));
            wssv.start();
        }

        public static void end()
        {
            wssv.stop();
        }
    }
}

创建caseinfobehavior

using newtonsoft.json;
using system;
using system.collections.generic;
using websocketsharp;
using websocketsharp.server;

namespace caseauto.helper.websocket
{

    public class caseinfobehavior : websocketbehavior
    {
        private string _username;
        private dictionary<string, caseinfobehavior> _clients = new dictionary<string, caseinfobehavior>();

        public caseinfobehavior(dictionary<string,caseinfobehavior> clients)
        {
            _clients = clients;
        }

        protected override void onmessage(messageeventargs e)
        {
            var data=jsonconvert.deserializeobject<websocketmsgmodel>(e.data);
            switch (data.msgtype){
                case msgtype.normal:
                    var msg = $"this msg from serve,i recive msg:{data.content}";
                    send(msg);
                    break;
                case msgtype.group:
                    sendmessagetoall(data.content);
                    //sessions.broadcast(data.content);
                    break;
                case msgtype.to_reciver:
                    sendmessagetoreciver(data.reciver, data.content);
                    break;
                default:
                    break;
            }
           
        }

        protected override void onopen()
        {
            _username = context.querystring["name"];
            if (string.isnullorempty(_username))
            {
                _username = this.id;
                return;
            }


            _clients.add(_username, this);
            console.writeline("client connected: " + _username);
        }

        protected override void onclose(closeeventargs e)
        {
            _clients.remove(_username);
            console.writeline("client connected: " + _username);
        }


        protected void sendmessagetoreciver(string reciver,string message)
        {
            foreach (var client in _clients)
            {
                if (client.key == reciver) { 
                    client.value.send(message);
                    break;
                }
            }
        }

        protected void sendmessagetoall(string message)
        {
            foreach (var client in _clients)
            {
                client.value.send(message);
            }
        }
    }
}

创建websocketmsgmodel

namespace caseauto.helper.websocket
{
    public class websocketmsgmodel
    {
        public msgtype msgtype { get; set; }
        public string content{ get; set; }
        public string sender { get; set; }
        public string reciver { get; set; }
    }

    public enum msgtype { 
        normal=0,
        group=1,
        to_reciver = 2,
    }
}

使用

websockethelper.init();

二.客户端

新建一个.net项目,如websocket.client

安装包

install-package websocketsharp -pre

使用

        static void main(string[] args)
        {
            using (var ws = new websocket("ws://127.0.0.1/caseinfo?name=c1"))
            {
                string? response = string.empty;
                ws.onmessage += (sender, e) =>
                {
                    response = e.data;
                    console.writeline("response: " + response);
                };
                ws.connect();
                while (true)
                {
                    string? request = console.readline();

                    ws.send(request);
                    console.readkey(true);
                }
            }
        }

三.调试

  • 启动分别启动服务端、客户端
  • 客户端控制台输入【常规通讯测试】
{"msgtype":0,"content":"hello"}

输入后,回车,服务端返回

在这里插入图片描述

启动apipost,新建websocket,输入以下内容【群发】

ws://127.0.0.1/caseinfo?name=c2
{"msgtype":1,"content":"hello456","reciver":"c1"}

在这里插入图片描述

点击连接:

在这里插入图片描述

点击发送:

在这里插入图片描述

在这里插入图片描述

4. 指定人发送

将apipost中发送的消息变为下面内容,重新观察apipost和自定义客户端

{"msgtype":2,"content":"hello c1","reciver":"c1"}

以上就是c#实现websocket双向通信的示例代码的详细内容,更多关于c# websocket双向通信的资料请关注代码网其它相关文章!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com