c# websocker server client

news/2024/11/27 8:25:48/

示例程序的主要功能,服务端不停的发送字符串,客户端接收字符串。

服务端,使用Fleck组件,通过nuget方式引用,控制台程序。


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

namespace websocketserver
{
    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:6666");
            server.Start(socket =>
            {
                socket.OnOpen = () =>
                {
                    Console.WriteLine("Open!");
                    allSockets.Add(socket);
                };
                socket.OnClose = () =>
                {
                    Console.WriteLine("Close!");
                    allSockets.Remove(socket);
                };
                socket.OnMessage = message =>
                {
                    Console.WriteLine(message);
                    allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
                };
            });

            //var input = Console.ReadLine();
            //while (input != "exit")
            //{
            //    foreach (var socket in allSockets.ToList())
            //    {
            //        socket.Send(input);
            //    }
            //    input = Console.ReadLine();
            //}

            while (true)
            {
                foreach (var socket in allSockets.ToList())
                {
                    string input = "hello world";
                    socket.Send(input);
                }
                Thread.Sleep(1000);
            }

        }
    }
}
 

c# 客户端  控制台程序

using System;
using System.Net.WebSockets;
using System.Text;
using System.Threading;
using System.Threading.Tasks;

namespace websocketclient
{
    class Program
    {
        
        static ClientWebSocket clientWebSocket = new ClientWebSocket();
        
        public static void Main(string[] args)
        {
            
            clientWebSocket.ConnectAsync(new Uri("ws://localhost:6666"), CancellationToken.None).Wait();//

            //发送消息
            //while (true)
            //{
            //    ArraySegment<byte> bytesToSend = new ArraySegment<byte>(Encoding.UTF8.GetBytes("ok"));
            //    clientWebSocket.SendAsync(bytesToSend, WebSocketMessageType.Text, true, CancellationToken.None).Wait();
            //    Thread.Sleep(1000);
            //}

            //RunWebSocketClient();
            receiveMsg();
            Console.ReadKey();
        }

        public static async Task receiveMsg()
        {
            while (true)
            {
                var result = new byte[1024];

                await clientWebSocket.ReceiveAsync(new ArraySegment<byte>(result), new CancellationToken());//接受数据

                //var lastbyte = ByteCut(result, 0x00);
                //var str = Encoding.UTF8.GetString(lastbyte, 0, lastbyte.Length);

                Console.WriteLine("Received message: " + Encoding.UTF8.GetString(result, 0, result.Length));

                Thread.Sleep(1000);
            }
        }


        public static async Task RunWebSocketClient()
        {
            ClientWebSocket websocket = new ClientWebSocket();
            string url = "ws://localhost:6666/";
            Console.WriteLine("Connecting to: " + url);
            await websocket.ConnectAsync(new Uri(url), CancellationToken.None);
            string message = "Hello World";
            Console.WriteLine("Sending message: " + message);
            byte[] messageBytes = Encoding.UTF8.GetBytes(message);
            await websocket.SendAsync(new ArraySegment<byte>(messageBytes), WebSocketMessageType.Text, true, CancellationToken.None);
            byte[] incomingData = new byte[1024];
            WebSocketReceiveResult result = await websocket.ReceiveAsync(new ArraySegment<byte>(incomingData), CancellationToken.None);
            if (result.CloseStatus.HasValue)
            {
                Console.WriteLine("Closed; Status: " + result.CloseStatus + ", " + result.CloseStatusDescription);
            }
            else
            {
                Console.WriteLine("Received message: " + Encoding.UTF8.GetString(incomingData, 0, result.Count));
            }
        }
    }
}
 

本文的c#服务端实现参考了 https://blog.csdn.net/ieeso/article/details/112121950  

该文章包含浏览器端的客户端实现。


http://www.ppmy.cn/news/547122.html

相关文章

SpringBoot中的yml文件中读取自定义配置信息

SpringBoot中的yml文件中读取自定义配置信息 开发中遇到的问题&#xff0c;百度的答案我都没有找到&#xff0c;去找大佬获取到的经验总结&#xff0c;这只是其中的一种方法&#xff0c;如果其他大佬有新的方法&#xff0c;可以分享分享。 一、非静态属性 1.1 yml文件 自定…

Python 教程:从零到大师

首先, 什么是Python? 用python作者Guido van Rossum自己的话来说&#xff0c;Python是这样的一门语言&#xff1a; "它是一门高级编程语言, 它的核心设计理念是让所有代码变得更易阅读&#xff0c;并给开发者们提供一种“仅仅几行代码就能编写编程逻辑”的语法。 那么&am…

分子碰撞频率和自由程------从一个物理小问题解剖自己的数学思维

物理学12-8节中&#xff0c;关于分子平均碰撞的解说如下&#xff1a; &#xff08;一&#xff09;分子碰撞自由程公式 第一个公式中&#xff0c;lamda v / z中&#xff0c;v的单位是m/s, z的单位是A/s, 其中A是常数。那么lamda描述的结果是m/A, 这正是长度单位。 此公式lamda…

研究生基本的学习规划

基本的学习规划&#xff0c;供你参考&#xff1a; 1. 确定研究方向和课程选择 研究不同的研究领域和方向&#xff0c;选择符合自己兴趣和目标的研究方向了解研究生课程设置&#xff0c;选择适合自己研究方向的核心课程和选修课程 2. 深入研究和文献调研 阅读相关领域的经典…

解决Edge浏览器下载速度慢的问题:

我们在使用Edge下载东西时往往会出现下载速度较慢的情况&#xff0c;这里我分享给大家一个小妙招&#xff1a; 1.打开Edge&#xff1a; 在搜索框中&#xff1a;搜索&#xff1a; edge://flags 进入Edge浏览器的实验室 2.在搜索标签这一栏输入download弹出&#xff1a; 这里…

Win11下载速度慢怎么办?Win11下载速度慢的解决方法

我们在使用电脑的时候一般是离不开网络的&#xff0c;不过有的小伙伴在使用Win11系统的电脑时却反馈网速度很慢&#xff0c;影响自己的使用体验&#xff0c;那么遇到Win11下载速度慢怎么办呢&#xff1f;下面就和小编一起看看有什么解决方法吧。更多win11安装教程参考小白一键装…

chrome浏览器下载速度慢问题解决办法

chrome浏览器下载速度慢问题解决办法 两个步骤&#xff1a; 1.复制下载链接2.打开迅雷下载&#xff0c;亲测有效&#xff0c;速度较快。

外网资源下载速度过慢的问题

在做科研时&#xff0c;有些数据集的下载速度非常慢&#xff0c;几个G的数据要下载几天甚至十几天&#xff0c;博客提供了两种加速方法&#xff0c;一种是使用百度云的离线下载&#xff0c;一种是使用Internat Download Manager(简称IDM)下载器。 我这里用了第三种方法&#x…