首页 > 编程语言 >C# WebSocket【使用SuperWebSocket实现】

C# WebSocket【使用SuperWebSocket实现】

时间:2024-11-07 10:21:14浏览次数:3  
标签:WebSocket Log C# void private SuperWebSocket msg webSocket4Net public

一) SuperWebSocket实现服务端

1、创建窗口程序,WindowsFormsWebsocketServer

2、添加程序包

工具 -->Nuget包管理 -->管理解决方案的Nuget程序包 -->搜索 SuperWebSocket ,选择SuperWebSocketNETServer,点击右侧 安装,等待安装完成,安装完成以后,项目会多出很多引用库,如下

public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
      websocketServer();
    }
 
    private void websocketServer()
    {
      Log("我是服务端");
      WebSocketServer webSocketServer = new WebSocketServer();
      webSocketServer.NewSessionConnected += WebSocketServer_NewSessionConnected;
      webSocketServer.NewMessageReceived += WebSocketServer_NewMessageReceived;
      webSocketServer.SessionClosed += WebSocketServer_SessionClosed;
      if (!webSocketServer.Setup("127.0.0.1", 1234))
      {
        Log("设置服务监听失败!");
      }
      if (!webSocketServer.Start())
      {
        Log("启动服务监听失败!");
      }
      Log("启动服务监听成功!");
      //webSocketServer.Dispose();
    }
 
    private void WebSocketServer_NewSessionConnected(WebSocketSession session)
    {
      Log("欢迎客户端: 加入");
      //SendToAll(session, msg);
    }
 
    private void WebSocketServer_NewMessageReceived(WebSocketSession session, string value)
    {
      Log("服务端收到客户端的数据 ==》"+value);
      //SendToAll(session, value);
    }
 
    private void WebSocketServer_SessionClosed(WebSocketSession session, SuperSocket.SocketBase.CloseReason value)
    {
      Log("客户端:关闭,原因:");
      //SendToAll(session, msg);
    }
 
    /// <summary>
    /// 广播,同步推送消息给所有的客户端
    /// </summary>
    /// <param name="webSocketSession"></param>
    /// <param name="msg"></param>
    public static void SendToAll(WebSocketSession webSocketSession, string msg)
    {
      foreach (var item in webSocketSession.AppServer.GetAllSessions())
      {
        item.Send(msg);
      }
    }
 
    private delegate void DoLog(string msg);
    public void Log(string msg)
    {
      if (this.logReveal.InvokeRequired)
      {
        DoLog doLog = new DoLog(Log);
        this.logReveal.Invoke(doLog, new object[] { msg });
      }
      else
      {
        if (this.logReveal.Items.Count > 20)
        {
          this.logReveal.Items.RemoveAt(0);
        }
        msg = DateTime.Now.ToLocalTime().ToString() + " " + msg;
        this.logReveal.Items.Add(msg);
      }
    }
  }

(二)WebSocket4Net实现客户端

1、创建窗口程序,WindowsFormsWebsocketClient

2、添加程序包

工具 -->Nuget包管理 -->管理解决方案的Nuget程序包 -->搜索 WebSocket4Net ,选择WebSocket4Net,点击右侧 安装,等待安装完成,安装完成以后,项目会多出很多引用库,如下

 

public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
      websocketServerTest();
    }
 
    public static WebSocket webSocket4Net = null;
    public void websocketServerTest()
    {
      FileUtil.getInstance().Log("我是客户端");
      webSocket4Net = new WebSocket("ws://127.0.0.1:1234");
      webSocket4Net.Opened += WebSocket4Net_Opened;
      webSocket4Net.Error += websocket_Error;
      webSocket4Net.Closed += new EventHandler(websocket_Closed);
      webSocket4Net.MessageReceived += WebSocket4Net_MessageReceived;
      webSocket4Net.Open();
      Thread thread = new Thread(ClientSendMsgToServer);
      thread.IsBackground = true;
      thread.Start();
      //webSocket4Net.Dispose();
    }
 
    private void saveBtn_Click(object sender, EventArgs e)
    {
      websocketServerTest();
    }
 
    public void ClientSendMsgToServer()
    {
      int i = 1;
      while (true)
      {
        webSocket4Net.Send("love girl" + i++);
        Thread.Sleep(TimeSpan.FromSeconds(5));
      }
    }
 
    private void WebSocket4Net_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
      FileUtil.getInstance().Log("服务端回复的数据:" + e.Message);
    }
 
    private void WebSocket4Net_Opened(object sender, EventArgs e)
    {
      FileUtil.getInstance().Log("客户端连接成功!发送数据中...");
      webSocket4Net.Send("来自客户端,准备发送数据!");
    }
 
    private void websocket_Error(object sender, EventArgs e)
    {
      FileUtil.getInstance().Log("WebSocket错误");
      Thread.Sleep(5000);
      if (webSocket4Net.State!= WebSocketState.Open&&webSocket4Net.State!=WebSocketState.Connecting)
      {
        websocketServerTest();
      }
    }
 
    private void websocket_Closed(object sender, EventArgs e)
    {
      FileUtil.getInstance().Log("WebSocket已关闭");
      Thread.Sleep(5000);
      if (webSocket4Net.State != WebSocketState.Open && webSocket4Net.State != WebSocketState.Connecting)
      {
        websocketServerTest();
      }
    }
  }
来源:https://www.zhangshengrong.com/p/nDa9jWORNj/

 

标签:WebSocket,Log,C#,void,private,SuperWebSocket,msg,webSocket4Net,public
From: https://www.cnblogs.com/ywtssydm/p/18531639

相关文章

  • 提供一个基本的cmakelists.txt文件
     project(ftptest)message("----------cmake${PROJECT_NAME}----------start")#设置构建类型为Release#set(CMAKE_BUILD_TYPERelease)set(CMAKE_VERBOSE_MAKEFILEON)#set(CMAKE_CXX_FLAGS"$ENV{CXXFLAGS}-rdynamic-O0-ggdb-std=c++11-Wall-Wno-......
  • 蓝凌OA /sys/webservice/hrStaffWebService存在任意文件读取漏洞
    蓝凌OA/sys/webservice/hrStaffWebService接口处存在任意文件读取漏洞FOFAapp="Landray-OA系统"POC文件读取POST/sys/webservice/hrStaffWebServiceHTTP/1.1Host:Content-Type:multipart/related;boundary=----j0ofrwsv2dtllbzzkyh9User-Agent:Mozilla/5.0(Wind......
  • 安装和配置CentOS9
    安装和配置CentOS9一、下载CentOS9镜像文件1.访问官网:首先,你需要访问CentOS的官网或阿里云镜像网站2.选择版本:在官网上,选择CentOS9的64位操作系统版本进行下载。3.等待下载:点击下载链接后,等待镜像文件下载完成。二、安装CentOS91.创建虚拟机(以VMwareWorkStationPro为例)......
  • 高速PCB设计的叠层问题
    高速PCB设计的叠层问题设计电源时,不能过分强调布局良好的PCB的重要性。此外,设计人员必须了解电源操作的重要性才能使工作成功。你有没有想过在pcb内部如何传递能量来给我们的电器供电?在一块PCB板上有太多的微小元件,设计如此复杂的电源来给每一个元件供电,需要极大的技巧、时间和......
  • SQL Server 2022 RTM Cumulative Update 15 发布下载 (累积更新包)
    SQLServer2022RTMCumulativeUpdate15发布下载(累积更新包)最新的累积更新(CU)下载,包含自SQLServer2022RTM发布以来的所有更新。请访问原文链接:https://sysin.org/blog/sql-server-2022/查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgSQLServer202......
  • JavaScript中的this到底是什么?
    写在前面在JavaScript中,this关键字是一个非常重要的概念,它指向当前执行上下文中的对象。理解this的工作原理对于编写高效、可维护的JavaScript代码至关重要。本文将深入探讨this关键字的用法和规则。什么是this?this是一个特殊的关键字,在不同的上下文中可以指向不同的对象......
  • JavaScript中的变量作用域
    写在前面在JavaScript中,变量作用域是指变量在代码中可见的范围。理解变量作用域对于编写高效、可维护的JavaScript代码至关重要。本文将深入探讨JavaScript中的变量作用域,包括全局作用域、函数作用域和块级作用域。全局作用域在JavaScript中,任何在函数或块之外声明的变量......
  • Android音频进阶之PCM设备创建(九十三)
    简介:CSDN博客专家、《Android系统多媒体进阶实战》一书作者新书发布:《Android系统多媒体进阶实战》......
  • 快看!HTML&CSS:你没见过的卡通表情
    它包含了HTML结构、CSS样式和一些内嵌的CSS动画。这个网页设计了一个有趣的动画效果,看起来像是一个卡通风格的“便便”表情,周围还有一些彩色的气泡(可能是代表气体的视觉效果O(∩_∩)O哈哈~)HTML<divclass='toots'><divclass='toot'></div><divclass='toot'><......
  • activiti查询发起、待办、已办理列表
    目录一、实体类 二、服务实现类 三、数据访问层一、实体类创建接收结果集的实体类。代码如下:@Data@EqualsAndHashCode(callSuper=false)@Accessors(chain=true)@ApiModel(value="用户查询",description="查询用户待办、已执行、发起流程相信")public......