基于.Net 框架实现WebSocket 简单通信——服务端

news2024/12/26 12:07:59

新建项目

创建一个.Net 框架的控制台程序。

添加包 

项目 → 管理 NuGet 程序包打开包管理窗口,添加SuperWebSocket 程序包。

实现

项目 → 添加类打开添加新项窗口,添加一个C#类。

启动监听 

WebSocketServer socket = new WebSocketServer();

Console.WriteLine("IP:" + ip);
Console.WriteLine("端口:" + port);

if (!socket.Setup(ip, port))
{
    Console.WriteLine("监听地址设置失败!");
    return;
}

if (!socket.Start())
{
    Console.WriteLine("监听启动失败!");
    return;
}

Console.WriteLine("启动服务成功,等待连接……");

 添加连接监听

socket.NewSessionConnected += NewSessionConnected;

void NewSessionConnected(WebSocketSession session)
{
    Console.WriteLine("{0:HH:MM:ss} 与 {1} 创建连接!", DateTime.Now, session.RemoteEndPoint);
}

 添加信息接收监听

socket.NewMessageReceived += NewMessageReceived;

void NewMessageReceived(WebSocketSession session, string message)
{
    Console.WriteLine("{0:HH:MM:ss} 接收到 {1} 发送的信息:{2}", DateTime.Now, session.RemoteEndPoint, message);
}

 添加二进制流接收监听

socket.NewDataReceived += NewDataReceived;

void NewDataReceived(WebSocketSession session, byte[] data)
{
    Console.WriteLine("{0:HH:MM:ss} 接收到来自:{1} 的二进制流,长度:{2}", DateTime.Now, session.RemoteEndPoint, data.Length);
}

 广播(string )

foreach (var session in socket.GetAllSessions())
{
    session.Send(msg);
}

 广播(byte[] )

foreach (var session in socket.GetAllSessions())
{
    session.Send(data, 0, data.Length);
}

添加断连监听

socket.SessionClosed += SessionClosed;

void SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason reason)
{
    Console.WriteLine("{0:HH:MM:ss} 与 {1} 断连,原因:{2}", DateTime.Now, session.RemoteEndPoint, reason);
}

关闭监听

socket.Stop();

效果

拓展 

IP 端口配置及读取

App.config 添加appSettings 

视图 → 解决方案资源管理器打开资源管理器窗口,在资源管理器窗口找到App.config 并打开,添加appSettings。

<appSettings>
    <add key="SvrIP" value="127.0.0.1" />
    <add key="SvrPort" value="1213" />
</appSettings>

读取

ip = ConfigurationManager.AppSettings["SvrIP"];
int.TryParse(ConfigurationManager.AppSettings["SvrPort"], out port);

客户端 

Unity 实现WebSocket 简单通信——客户端-CSDN博客【代码】Unity 实现WebSocket 简单通信——客户端https://blog.csdn.net/2301_79311694/article/details/139534415

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1812055.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

浅谈DALL-E2

目录 1.概述 2.诞生背景 3.作用 4.版本历史 5.模型和技术 6.应用场景 6.1.十个应用场景 6.2.游戏开发 7.接口 8.未来展望 9.总结 1.概述 DALL-E2 是由 OpenAI 开发的一个图像生成模型&#xff0c;可以根据文本描述生成高质量的图像。DALL-E2 是 DALL-E 的升级版&am…

【小白学Python】自定义图片的生成(一)

目录标题 安装Pillowdemo代码初次代码计划 个人需要&#xff0c;基于文字生成图片。 除了AI外&#xff0c;对于简单的图片&#xff0c;Python在这方面也非常擅长。 我算是一个Python小白&#xff0c;除了业余时尝试过Python基本语法的练习&#xff0c;从未真正使用过Python。…

电流的本质是什么

话说很久以前&#xff0c;科学发现纯靠人眼识别。有一天&#xff0c;泰勒斯(古希腊哲学家&#xff0c;被称为科学的祖师爷)一时手痒&#xff0c;拿着琥珀与皮毛摩擦。 结果他发现那种半透明的小石头&#xff0c;居然产生了吸引小物体的魔力。 面对这个现象&#xff0c;老泰开始…

CRM客户关系管理:全方位客户关系管理解决方案

CRM客户关系管理系统&#xff0c;基于Spring Cloud Alibaba、Spring Boot、MybatisPlus、Redis和VUE3 ElementUI微服务架构&#xff0c;提供全面的客户关系管理功能。系统智能化地管理客户信息、线索跟踪、商机开发、合同管理、回款计划等&#xff0c;助力企业提升客户满意度&a…

资产管理系统是什么?主要有哪些功能?

资产管理系统主要对企业的固定资产、流动资产、长期投资等进行综合管理&#xff0c;通过先进的条形码技术对资产实物从购置、领用、清理、盘点、借用归还、维修到报废进行全方位准确监管。 一、资产管理系统主要包括哪些功能&#xff1f; 1、资产管理 &#xff08;1&#xf…

掌握Python的全方位教程,2024年最新版本,初学者必备指南

哈喽&#xff0c;大家好&#xff01;热烈欢迎你迈出成为python开发者的第一步。我想这一定非常激动人心&#xff0c;对吧&#xff1f;无论你是刚刚开始学习编程&#xff0c;还是曾经用过其他语言有一定的编程经验&#xff0c;本书中课程将帮助你加速实现你学习python的目标。作…

vue30:组件通信

父子关系 1&#xff1a;父组件通过props将数据传递给子组件 2&#xff1a;子组件利用$emi通知父组件修改更新

CISP究竟适合谁?这四类人没跑了

在信息技术飞速发展的现在&#xff0c;网络安全已经成为了一个不可忽视的话题。 CISP&#xff0c;即注册信息安全专业人员&#xff0c;是网络安全领域内一项备受认可的专业认证。 但CISP究竟适合谁考呢&#xff1f;这不仅是一个技术问题&#xff0c;更是一个职业规划的问题。…

用友U8 许可更新

当登录U8客户端提示下面的界面时&#xff0c;需要联网更新许可 登录服务器&#xff0c;打开Win下面的许可管理 导入许可——在线同步许可 更新完成即可

重温react-01

创建react项目 // 第一步 npm install create-react-app -g // 第二步 create-react-app my-app目录介绍 my-app/README.md# 项目第三方依赖包node_modules/package.json# 一般用来存放静态依赖public/index.htmlfavicon.ico# 存放项目源代码&#xff0c;注意只有放在scr目录…

java:使用JSqlParser给sql语句增加tenant_id和deleted条件

# 示例代码 【pom.xml】 <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-core</artifactId><version>3.4.3.1</version> </dependency>【MyJSqlParserTest.java】 package com.chz.myJSqlParser;pu…

短视频矩阵源码---矩阵托管1000个账号如何正规开发规则实现

一、短视频矩阵源码开发实现规则&#xff1a; 1.首先是确保各个官方平台api接口的稳定性&#xff0c;一定要是各个平台正规的api 2.其次是保证服务器运行&#xff0c;带宽保证能够并行&#xff0c;目前我们这边用的是源码所需服务器配置&#xff1a;规格:最低8核16G2、硬盘:系…

基于Sentry+OpenTelemetry实现微服务前后端全链路监控

文章目录 前⾔背景技术⽅案Sentry私有化部署部署环境准备 项目集成前端后端agent探针集成sentry sdk集成增强探针为⽇志注⼊TraceID异常处理SDK⾃定义开发sentry sdk⾃定义开发⾃定义SentryEvent注⼊otel追踪信息⾃定义全局异常上报issue事件新增动态过滤功能 Java Agent Exten…

【重拾数学知识】导数、极值和最值

前言 在深度学习中&#xff0c;梯度下降法是一种常用的优化算法&#xff0c;用于更新模型参数以最小化损失函数。这梯度下降法中涉及到数学中的导数、极值等相关知识&#xff0c;因此我们重新回顾相关内容&#xff0c;以便加深理解。 相关概念 导数 一个问题 如何求得一个…

Project 项目管理软件真的好用吗?

作为一个普通的职场人&#xff0c;或许只要掌握office全家桶&#xff0c;即可应对大部分工作。 但对项目经理来说&#xff0c;这是远远不够的。项目经理需要实时掌握项目进度、把关项目质量、应对项目风险、实时分析项目数据&#xff0c;做出正确的决策等等… 而拥有一款高效…

开发自动发消息插件需要用到的源代码!

在现今的数字化时代&#xff0c;自动发消息插件成为了许多应用程序中不可或缺的一部分&#xff0c;这些插件能够帮助我们自动化地完成消息发送任务&#xff0c;提高工作效率&#xff0c;节省时间成本。 那么&#xff0c;开发一个自动发消息插件究竟需要用到哪些关键的源代码呢…

C++STL初阶(4):初识vector

vector是一个类模版&#xff0c;是一个顺序容器&#xff0c;底层思维就是顺序表&#xff0c;而顺序表的本质就是一个可以改变size的数组。本篇基于string的学习基础&#xff0c;我们对vector进行一个大致的了解和学习 1.基本介绍 1. vector 是表示可变大小数组的序列容器&#…

【Unity自动化游戏框架】通用自动化游戏框架 爽到起飞的工作流 巨幅提升效率 质量 产能

https://github.com/sunsvip/GF_HybridCLRhttps://github.com/sunsvip/GF_HybridCLR 开始GF_HybridCLR自动化通用游戏框架&#xff0c;功能设计和用法的系列博文&#xff1b; GF_HybridCLR通用框架介绍 自动化工作流框架打包/HybridCLR热更流程 万人同屏战斗项目模板 前言: &…

2025年QS世界大学排名,美国大学表现如何?

大多数访问学者申请&#xff0c;在探讨QS大学排名中美国大学的表现时&#xff0c;我们不难发现这些学府在全球高等教育舞台上占据着举足轻重的地位。QS排名作为评估全球大学综合实力的重要指标之一&#xff0c;充分展示了美国大学在学术声誉、科研实力、教学质量和国际影响力等…

57.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露(5)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;56.WEB渗透测试-信息收集- 端口、目录扫描、源码泄露&#xff08;4&#xff09; 下载网站…