广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C#Websocket连接实现wss协议
  • 137
分享到

C#Websocket连接实现wss协议

2024-04-02 19:04:59 137人浏览 安东尼
摘要

目录一、什么是websocket?二、WEBSocket、Socket、Http、MQtt之间的区别?Socket:WebSocket:MQtT:HTTP:三、WS和WSS协议一、什

一、什么是Websocket?

1.WebSocket是HTML5下一种新的协议(websocket协议本质上是一个基于tcp的协议)
2.它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯的目的
3.Websocket是一个持久化的协议

二、Websocket、Socket、Http、Mqtt之间的区别?

Socket:

Socket是对tcp/ip协议族的封装的接口,Socket连接可以指定不同的传输层协议,即TCP或UDP,由于它是基于tcp/ip的,所以一般用在局域网内通信。

WebSocket:

WebSocket协议是基于TCP的一种新的网络协议,和http协议一样属于应用层协议,是一种让客户端和服务器之间能进行双向实时通信(全双工)的技术,且支持长连接,可以进行互联网间通信。引入ws和wss分别代表明文和密文的websocket协议,且默认端口使用80或443,几乎与http一致,WebSocket也要有一个握手过程,然后才能正式收发数据,由于数据包头部协议较小,不同于http每次请求需要携带完整的头部,所以网络开销比较少,长连接也让延迟明显更少(不需要重复新建连接)。

MQTT:

MQTT协议是为大量计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,它具有以下主要的几项特性:
1.使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;
2.对负载内容屏蔽的消息传输;
3.使用 TCP/IP 提供网络连接;

HTTP:

HTTP是一个属于应用层的,基于TCP/IP通信协议来传递数据(html 文件, 图片文件, 查询结果等)。

通信方式:

1.浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送请求。Web服务器根据接收到的请求后,向客户端发送响应信息。
2.HTTP之请求消息Request:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
3.HTTP之响应消息Response:HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。
若connection 模式为close,则服务器会主动关闭TCP连接,客户端被动关闭连接,释放TCP连接;若connection 模式为keepalive,则该连接会保持一段时间,在该时间内可以继续接收请求;

三、WS和WSS协议

WS协议和WSS协议两个均是WebSocket协议的SCHEM,两者一个是非安全的,一个是安全的。也是统一的资源标志符。就好比HTTP协议和https协议的差别。非安全的没有证书,安全的需要SSL证书。(SSL是Netscape所研发,用来保障网络中数据传输的安全性,主要是运用数据加密的技术,能够避免数据在传输过程被不被窃取或者监听。)其中WSS表示在TLS之上的WebSocket。WS一般默认是80端口,而WSS默认是443端口,大多数网站用的就是80和433端口。(在高防防护过程中,80和433端口的网站是需要备案才可以接入国内的。)当然网站也会有别的端口,这种如果做高防是方案是可以用海外高防的。WS和WSS的体现形式分别是TCP+WS AS WS ,TCP+TLS+WS AS WS。服务器网址就是 URL。最后墨者安全再说下WebSocket协议的特点:建立在 TCP 协议之上,服务端实现容易;与 HTTP 协议有良好的兼容性,握手时不容易被屏蔽,可以通过各种 HTTP 代理服务器;数据轻量,实时通讯;可以发送文本和二进制数据。不限制同源,客户端可以与任意服务器端进行通讯。因此WebSocket协议的出现,为很多人解决了关于扩展以及兼容性协议的烦恼问题。

WSS连接:由于wss是基于SSL,所以需要进行双向验证,客户端连接服务端时,我需要添加证书(服务端不验证可以不添加),服务端进行验证。注意:客户也需要对服务端进行验证,所以需要添加服务端证书回调,进行验证,这是很多人忽视,所以出现无法连接远程服务器,TLS/SSL验证失败的提示。

        public MainWindow()
        {
            InitializeComponent();
            RemoteCertificateValidationCallback remote = ValidateServerCertificate;
            ServicePointManager.ServerCertificateValidationCallback = remote;
        }
        /// <summary>
        /// 服务端验证
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="certificate"></param>
        /// <param name="chain"></param>
        /// <param name="sslPolicyErrors"></param>
        /// <returns></returns>
        public bool ValidateServerCertificate( object sender,X509Certificate certificate,X509Chain chain,SslPolicyErrors sslPolicyErrors)
        {
            return   true ;
        }        
        /// <summary>
        /// WebSocket客户端连接
        /// </summary>
        /// <param name="param"></param>
        /// <returns></returns>
        public async Task Connect()
        {
            CancellationTokenSource t = new CancellationTokenSource();
            try
            {
                client.Options.SetRequestHeader("key", "value");
                X509Certificate2 cert = new X509Certificate2("xxx.cert");
                client.Options.ClientCertificates.Add(cert);
                Uri uri = new Uri("wss://xxxxxx");
                //var config=new ServerConfig
                await client.ConnectAsync(uri, t.Token);
                Thread.Sleep(300);
                Console.WriteLine($"链接websocket:[{uri}] 完成");
                Task s1 = new Task(Receive, t, t.Token, TaskCreationOptions.LongRunning);
                s1.Start();
                token = t;
                Console.WriteLine("Send Hello");
            }
            catch (Exception ex)
            {
                Console.WriteLine($"链接websocket:[{uri}] 失败", ex.Message);
 
            }
        }
        /// <summary>
        /// Websocket接收
        /// </summary>
        /// <param name="obj"></param>
        private void Receive(object obj)
        {
            CancellationTokenSource ts = obj as CancellationTokenSource;
            byte[] bs = new byte[1024];
            while (!ts.Token.IsCancellationRequested)
            {
                try
                {
                    ArraySegment<byte> buff = new ArraySegment<byte>(bs, 0, bs.Length);
                    Task<WebSocketReceiveResult> res = client.ReceiveAsync(buff, ts.Token);
                    res.Wait();
                    if (ts.Token.IsCancellationRequested)
                    {
                        return;
                    }
                    if (WebSocketCloseStatus.NORMalClosure == res.Result.CloseStatus)
                    {
                        Console.WriteLine($"websocket:与服务器断开链接:{res.Result.CloseStatus} --> Desc :{res.Result.CloseStatusDescription}");
                        ts.Cancel();
                        return;
                    }
                    string strData = encod.GetString(bs, 0, res.Result.Count);
                    Console.WriteLine(strData);
                    WsMsg msg = WsMsg.Deserialize(strData);
                }
                catch (Exception ex)
                {
                    Console.WriteLine("解析或执行 websocket:命令失败", ex);
                }
            }
        }

Websocket客户端与服务端通信代码参考文章:

WebSocket协议:5分钟从入门到精通 - 程序猿小卡  https://www.cnblogs.com/chyingp/p/websocket-deep-in.html

C# WebSocket_熊思雨的博客 https://blog.csdn.net/qq_38693757/article/details/114933642

C# WebSocket - 南国叶子 https://www.cnblogs.com/nanguoyezi/p/9351555.html

到此这篇关于C# Websocket连接实现wss协议的文章就介绍到这了,更多相关C# Websocket连接wss内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C#Websocket连接实现wss协议

本文链接: https://www.lsjlt.com/news/149702.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C#Websocket连接实现wss协议
    目录一、什么是Websocket?二、Websocket、Socket、Http、Mqtt之间的区别?Socket:WebSocket:MQTT:HTTP:三、WS和WSS协议一、什...
    99+
    2022-11-13
  • C#的Websocket怎么连接实现wss协议
    本篇内容主要讲解“C#的Websocket怎么连接实现wss协议”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#的Websocket怎么连接实现wss协议”吧!一、什么是Websocket?W...
    99+
    2023-06-30
  • nginx配置wss协议的实现
    需求:nginx配置websocket协议连接,(背景,在一个使用一个免费的仅仅支持单域名的证书时,既要支持https协议,也要支持wss协议时,我们可以配置一个nginx根据不同的...
    99+
    2023-03-03
    nginx wss协议 nginx wss
  • 基于node实现websocket协议
    一、协议 WebSocket是一种基于TCP之上的客户端与服务器全双工通讯的协议,它在HTML5中被定义,也是新一代webapp的基础规范之一。 它突破了早先的AJAX的限制,关键在于实时性,服务器可以主动...
    99+
    2022-06-04
    协议 node websocket
  • python用socket实现协议TCP长连接框架
    “ 使用python实现协议中常见的TCP长连接框架。” 分析多了协议就会发现,很多的应用,特别是游戏类和IM类应用,它们的协议会使用长连接的方式,...
    99+
    2022-11-13
  • HTML5中WebSocket协议的实现原理是什么
    这篇文章将为大家详细讲解有关HTML5中WebSocket协议的实现原理是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。WebSocket协议的目的是为了工作于现有的网络基础设施。作为这...
    99+
    2023-06-09
  • Java应用层协议WebSocket实现消息推送
    目录前言浏览器端服务器端前言   大部分的web开发者,开发的业务都是基于Http协议的:前端请求后端接口,携带参数,后端执行业务代码,再返回结果给前端。作者参与...
    99+
    2023-02-22
    Java WebSocket Java WebSocket消息推送
  • WebSocket协议的安全性与加密传输实现
    随着互联网的发展,网络通信协议逐渐演化,传统的HTTP协议有时无法满足实时通信的需求。而WebSocket协议作为一种新兴的通信协议,具有实时性强、双向通信和低延迟等优势,被广泛应用于在线聊天、实时推送和游戏等领域。然而,由于WebSock...
    99+
    2023-10-21
    安全性 加密传输 WebSocket协议
  • python中怎么用socket实现协议TCP长连接框架
    这篇文章主要介绍“python中怎么用socket实现协议TCP长连接框架”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python中怎么用socket实现协议TCP长连接框架”文章能帮助大家解决问...
    99+
    2023-06-29
  • python如何使用socket实现TCP协议长连接框架
    这篇文章主要介绍了python如何使用socket实现TCP协议长连接框架,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。分析多了协议就会发现,很多的应用,特别是游戏类和IM类...
    99+
    2023-06-29
  • C#使用Twain协议实现扫描仪连续扫描功能
    C#调用Twain接口实现扫描仪连续扫描。在监听的TwainCommand.TransferReady状态中,是调用扫描仪扫描图片的。我开始的时候尝试修改twain类中Transfe...
    99+
    2022-11-12
  • Java应用层协议WebSocket如何实现消息推送
    这篇“Java应用层协议WebSocket如何实现消息推送”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java应用层协议W...
    99+
    2023-07-05
  • C/C++实现HTTP协议解析的示例代码
    超文本传输协议 (HTTP) 是分布式、协作、超媒体信息系统的应用层协议。 这是自 1990 年以来万维网数据通信的基础。HTTP 是一种通用且无状态的协议,它可以用于其他目的,也可...
    99+
    2022-11-13
  • ​Golang 实现客户端与服务器端UDP协议连接通讯
    我们先说一下UDP的概念和作用 UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一...
    99+
    2023-06-04
  • Golang 实现客户端与服务器端UDP协议连接通讯
    我们先说一下UDP的概念和作用 UDP是用户数据报协议,是一个简单的面向数据报的运输层协议。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。由于UDP在传输数据报前不用在客户和服务器之间建立一...
    99+
    2023-06-05
  • Java基于websocket协议与netty实时视频弹幕交互实现
    目录摘要1 技术选型1.1 netty1.2 WebSocket1.3 为什么做这样的技术选型。2 实现思路2.1 服务架构3 实现效果3.1 视频展示4 代码实现4.1 项目结构4...
    99+
    2022-11-12
  • C#怎么使用Twain协议实现扫描仪连续扫描功能
    本篇内容主要讲解“C#怎么使用Twain协议实现扫描仪连续扫描功能”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C#怎么使用Twain协议实现扫描仪连续扫描功能”吧!C#调用Twain接口实现扫...
    99+
    2023-06-26
  • esp8266模块--MQTT协议连接服务器实现数据接收和发送+源码
    首先推荐中国移动的代码,我觉得中国移动的代码更为合理:(但是有一些其他的模块在里面) OneNET开发板代码、资料--2020-09-27--标准板、Mini板bug修复 - 开发板专区 - OneNET设备云论坛 (10086.cn) 以...
    99+
    2023-09-20
    笔记 嵌入式硬件 stm32
  • 在c#中使用Socket实现一个tcp协议
    这篇文章给大家介绍在c#中使用Socket实现一个tcp协议,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一、概述UDP和TCP是网络通讯常用的两个传输协议,C#一般可以通过Socket来实现UDP和TCP通讯,由于....
    99+
    2023-06-06
  • WebSocket中怎么利用OkHttp实现长连接
    WebSocket中怎么利用OkHttp实现长连接,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WebSocket介绍先简单介绍下WebSoc...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作