C# 实现 Websocket通讯聊天 (管用、超好使,点个赞)

这篇具有很好参考价值的文章主要介绍了C# 实现 Websocket通讯聊天 (管用、超好使,点个赞)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、背景

WebSocket出现之前,Web端为了实现即时通讯,所用的技术都是Ajax轮询(polling)。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览器。这种传统的HTTP request 的模式带来很明显的缺点 – 浏览器需要不断的向服务器发出请求,然而HTTP request 的header是非常长的,里面包含的数据可能只是一个很小的值,这样会占用很多的带宽。而比较新的技术去做轮询的效果是Comet , 但这种技术虽然可达到全双工通信,依然需要发出请求。

2、介绍

Web Sockets没有什么神奇之处,首先要意识到该协议本质上是一个基本的双工TCP/IP套接字连接。连接从客户端连接到远程服务器并将HTTP标头文本发送到该服务器开始。标头文本要求Web服务器将连接升级为Web套接字连接。这是作为握手完成的,Web服务器使用适当的HTTP文本标头进行响应,从那时起,客户端和服务器将使用Web Socket语言。

3、WebSocket 技术概览

在 WebSocket API,浏览器和服务器只需要要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送,改变了原有的B/S模式。WebSocket的技术原理:

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

WebSocket的技术原理:

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

4、C# websocket及时通信协议的实现

Websocket有java、nodejs、python、PHP、等版本 ,哪些浏览器支持websocket:

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html 

 我现在使用的是C#版本,服务器端是Fleck。客户端和服务器端来使用websocket的,下面开始讲解如何使用:

接下来我们使用的是C#控制台程序来实现

1、打开vs2019,创建空项目

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 2、c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 

 3、添加控制台项目c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 4、引入fleck

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 Fleck是C#中的一个WebSocket服务器实现。Program.cs代码如下:

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

namespace WebSocketConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            FleckLog.Level = LogLevel.Debug;
            var allSockets = new List<IWebSocketConnection>();
            var server = new WebSocketServer("ws://0.0.0.0:7080");
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("客户端连接成功!");
                    allSockets.Add(socket);
                    Console.WriteLine("当前客户端数量:"+allSockets.ToList().Count);
                };
                socket.OnClose = () =>
                {
                    Console.WriteLine("客户端已经关闭!");
                    allSockets.Remove(socket);
                    Console.WriteLine("当前客户端数量:" + allSockets.ToList().Count);
                };
                //收到消息时
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    allSockets.ToList().ForEach(s => s.Send(message));
                };
            });

            //读取输入消息
            var input = Console.ReadLine();
            //当消息不为“exit"时,则进入死循环
            while (input != "exit")
            {
                //遍历所有的socket客户端,给每个客户端发送消息
                foreach (var socket in allSockets.ToList())
                {
                    socket.Send(input);
                }
                input = Console.ReadLine();
            }

        }
    }
}

编译没有问题,成功,

5、解决方案上添加新项目

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 

选择c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 项目名称取名为:SocketWebClient,然后添加html网页,名称WebChatPage.html,内容如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body> 
    <div>发送消息:</div>
    <input type="text" id="msgContent" />
    <input type="button" value="点我发送" onclick="CHAT.chat()" /> 
    <div>接受消息:</div>
    <div id="receiveMsg" style="background-color: gainsboro;"></div> 
    <script type="application/javascript">

        window.CHAT = {
            socket: null,
            init: function() {
                if (window.WebSocket) {
                    CHAT.socket = new WebSocket("ws://127.0.0.1:7080/ws");//websocket服务器地址及端口
                    CHAT.socket.onopen = function() {
                        console.log("连接建立成功...");
                    },
                    CHAT.socket.onclose = function() {
                        console.log("连接关闭...");
                    },
                    CHAT.socket.onerror = function() {
                        console.log("发生错误...");
                    },
                    CHAT.socket.onmessage = function(e) {
                        console.log("接受到消息:" + e.data);
                        var receiveMsg = document.getElementById("receiveMsg");
                        var html = receiveMsg.innerHTML;
                        receiveMsg.innerHTML = html + "<br/>" + e.data;
                    }
                } else {
                    alert("浏览器不支持websocket协议...");
                }
            },
            chat: function() {
                var msg = document.getElementById("msgContent");
                CHAT.socket.send(msg.value);
            }
        };

        CHAT.init();

    </script>
</body>


</html>

6、在WebSocketConsole上找到生成的文件路径,即项目的debug目录

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 7、将SocketWebClient设为启动项目,运行html页面c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 8、c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 网页输入消息

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 9、再用另一个浏览器edge打开网页,输入消息

c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 c# websocket 服务,.Net开发技术,websocket,网络,服务器,c#,html

 websocket管用,好使,拈,扛把子。文章来源地址https://www.toymoban.com/news/detail-559204.html

到了这里,关于C# 实现 Websocket通讯聊天 (管用、超好使,点个赞)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element表格tooltip内容换行展示(本人第一次写帖子效果图在最后如果是各位想要的效果请点个赞,写的不好的地方也可以指导一下万分感谢)

    前言 在使用element的table中咱们有可能会遇到后端返回的单个字段有多个内容这个时候想一个单元格展示换行其实很简单直接就是template加个块标签v-for就可以了如果是很多的话这样表格就不美观如下图,这个时候大家会想到是show-overflow-tooltip,但是如果说数据跟我的一样是时

    2024年02月15日
    浏览(41)
  • springboot+websocket+webrtc 仿微信、仿QQ 音视频通话聊天 飞鱼chat IM即时通讯

    仿微信、QQ音视频聊天,文字表情、收发文件图片等功能。本项目使用springboot+websocket+webrtc-bootstrap5+H5+JQuery3.3+mysql实现,可自适应PC端和移动端 git地址在最后 pc端效果图 WebSocket是一种在单个TCP连接上进行全双工通信的协议,这使得客户端和服务器之间的数据交换变得更加简单

    2024年02月04日
    浏览(56)
  • webSocket及使用webSocket实现实时聊天通信

    webSocket在开始的时候依旧使用的是http协议,只不过后面保持tcp持久链接,是一种全双工通信。webSockets和http很像,它的请求url用的是ws、wss,对应http、https 初始化 npm init -y 安装ws依赖 npm i --save ws 写服务器代码 服务器启动 node server.js 配置前端代码,即告诉浏览器这个请求不要

    2023年04月11日
    浏览(41)
  • 使用WebSocket实现聊天功能

    使用WebSocket实现一对一的聊天功能与未读消息功能 会话表 字段名 字段类型 长度 注释 conversation_id int 11 会话ID create_time datetime 创建时间 conversation_type int 1 会话类型 消息表 字段名 字段类型 长度 注释 message_id int 11 消息ID conversation_id int 11 会话ID sender_id int 11 发送者ID receiver

    2024年02月11日
    浏览(43)
  • WebSocket实现聊天功能

    使用SpringBoot + WebSocket 实现模拟QQ聊天功能 源码地址:https://gitee.com/mmolu/ws-chat 登录界面展示 登录界面模仿QQ登录操作,支持拖动、最小化和关闭 聊天界面展示 登录后的右侧显示在线用户,右下方显示在线用户的登录日志 窗口支持拖动、关闭操作 发送消息界面展示 在线用户实

    2024年02月03日
    浏览(32)
  • websocket实现通讯——Java

    参考博客0 1)通知功能: 2)数据收集: 3)加密 认证: 4)反向控制钩子: 1、websocket则允许我们在一条ws连接上同时并发多个请求,即在A请求发出后A响应还未到达,就可以继续发出B请求。由于TCP的慢启动特性(新连接速度上来是需要时间的),以及连接本身的握手损耗,

    2024年02月15日
    浏览(47)
  • 【WebSocket】SpringBoot整合WebSocket实现聊天室(一)

    目录 一、准备 1、引入依赖 2、创建配置类 二、相关注解 首先我们需要在项目中引入依赖,有两种方式。第一种我们可以在创建Spring Boot项目时搜索WebSocket然后勾选依赖 第二种是我们可以直接在项目的pom.xml文件中插入以下依赖 我们需要进行如下配置 ServerEndpointExporter 是一个

    2024年02月13日
    浏览(50)
  • Netty 教程 – 实现WebSocket通讯

    WebSocket 协议是基于 TCP 的一种新的网络协议,它实现了浏览器与服务器 全双工(full-duplex)通信 ,允许 服务器主动发送信息给客户端 优点及作用 Http协议的弊端: Http协议为半双工协议。(半双工:同一时刻,数据只能在客户端和服务端一个方向上传输) Http协议冗长且繁琐 易

    2024年02月09日
    浏览(36)
  • Java+Vue实现聊天室(WebSocket进阶-聊天记录)

    WebSocket 是一种在单个TCP连接上进行全双工通信的协议。WebSocket通信协议于2011年被IETF定为标准RFC 6455,并由RFC7936补充规范。WebSocket API也被W3C定为标准。 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服

    2024年02月11日
    浏览(65)
  • Django实现websocket聊天室

    WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器双向通信,即允许服务器主动发送信息给客户端。因此,在WebSocket中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变

    2023年04月23日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包