首页 > 编程语言 >WebSocket C#服务器端 当网页刷新时出现无法重连 C#出错:数字小于数组在第一维的下限。 参数名: srcIndex

WebSocket C#服务器端 当网页刷新时出现无法重连 C#出错:数字小于数组在第一维的下限。 参数名: srcIndex

时间:2022-11-03 14:22:29浏览次数:38  
标签:WebSocket 服务器端 C# socketConn srcIndex 刷新 new 客户端

最近两天公司 要用到 WebSocket C#服务器端+Vue客户端

我之前做 WebSocket 是  C#服务器端 + 原生js客户端

原生js客户端 我用 iframe 将 WebSocket 用单独一个网页中。这个页不频繁刷新。这种做法一直没有问题

今天用 Vue客户端 来实现

Vue本身单页要 频繁刷新,当 刷新比较快时,

在网页中的websocket 的连接 始终是 Still in CONNECTING state   无论等多久都是这个状态。

这个问题 困扰了我很久。 一开始我认为是 Vue客户端 代码写的不对。其实不对。是C#服务器的问题

在这个函数中出错了

今天特意写出来,留个记念。

起初当我用 C#断点调试,则不再出错,每次刷新都能连接上。给了我启发。

在C#服务器端

注:这句  System.Threading.Thread.Sleep(100);   非常重要

如果网页不能在iframe中固定,需要刷新时(尤其是VUE这种单页不断刷新整页时)  线程等待100 毫秒 太短了,网页刷新后则不能再正确连接

解决方法: 将 100  改为 3000  在Vue上亲测没问题

#region WebSocket 监听
        private void m_WebSocketDoListen()
        {
            try
            {
                Char char1 = Convert.ToChar(65533);
                this.WebSocketListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                this.WebSocketListener.Bind(new IPEndPoint(this.IPV4, this.intWebSocketPort));
                this.WebSocketListener.Listen(500);//ConnectionsQueueLength
                while (true)
                {
                    Socket sc = this.WebSocketListener.Accept();
                    if (sc != null)
                    {
                        //System.Threading.Thread.Sleep(100);//这个线程 等待时间 太短了
                        System.Threading.Thread.Sleep(3000);
                        clsWebSocket socketConn = new clsWebSocket();
                        socketConn.ConnectionSocket = sc;
                        //socketConn.NewConnection += new NewConnectionEventHandler(socketConn_NewConnection);
                        socketConn.LineReceived += new clsSocket.LineReceivedEventHandler(m_OnLineReceived);//收到消息
                        socketConn.LineReceivedError += new clsSocket.LineReceivedErrorEventHandler(m_OnLineReceivedError);//收到消息时出错
                        socketConn.Disconnected += new clsSocket.DisconnectedEventHandler(m_Disconnected);//WebSocket中客户端断开连接
                        socketConn.ConnectionSocket.BeginReceive(socketConn.receivedDataBuffer,
                                                                 0, socketConn.receivedDataBuffer.Length,
                                                                 0, new AsyncCallback(socketConn.ManageHandshake),
                                                                 socketConn.ConnectionSocket.Available);;
                    }
                }
            }
            catch (Exception ex)//
            {
                myClass.clsLogHelper.m_CreateErrorLogTxt("WebScript StartServer", "出错", ex.Message.ToString());
            }
        }
        #endregion

完整代码

https://www.cnblogs.com/hailexuexi/p/16854230.html

标签:WebSocket,服务器端,C#,socketConn,srcIndex,刷新,new,客户端
From: https://www.cnblogs.com/hailexuexi/p/16854341.html

相关文章

  • leetcode257-二叉树的所有路径
    257.二叉树的所有路径 泪目,自己写出的递归遍历./***Definitionforabinarytreenode.*structTreeNode{*intval;*TreeNode*left;*......
  • 2022-11-03 Acwing每日一题
    本系列所有题目均为Acwing课的内容,发表博客即是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我......
  • Codeforces Round #610 (Div. 2) C
    C.PetyaandExamhttps://codeforces.com/contest/1282/problem/C考虑贪心先对于时间排序然后贪心我们可以不考那我们可以在此之前离开然后在离开之前这段时间多做......
  • C# HttpClient 封装
    usingSystem.Text;namespaceHTTPClientPacking{publicclassHttpClientHelper{privatestaticHttpClientHelper?_httpClientHelper=null;......
  • Elasticsearch安装部署
    本文只分享windows下安装流程安装版本为:elasticsearch-8.4.3kibana-8.4.3kibana汉化   双击运行 bin文件下的elas......
  • clip-path属性深入理解与使用
      clip-pathCSS属性可以创建一个只有元素的部分区域可以显示的剪切区域。区域内的部分显示,区域外的隐藏。clip-path的属性值可以是以下几种:1.inset; 将元素剪裁为......
  • 施耐德PLC如何实现组态监控和远程维护?
    工业组态是一种可以反映工艺流程、实现远程监控的系统软件,在很多工业领域都有使用。组态软件设备作为上位机,可以连接PLC、仪器仪表、智能模块等等设备或第三方软件,为企业提......
  • shell结合expect 脚本自动备份华为交换机配置文件
    最近看了点expect的知识点,就产生了个利用它来自动备份交换机配置的想法。于是就做了下尝试。来看看如何实现。Expect是一个用来实现自动交互功能的软件套件,是基于TCL的脚......
  • LVS + keepalived + nginx + tomcat 实现主从热备 + 负载均衡
    前言首先声明下,由于这两天找资料,看了不少博客,但是出于不细心,参考者的博客地址没有记录下来,所有文中要是出现了与大家博客相同的地方,那么请大家在评论区说明并附上博客......
  • React Native 锚点 ScrollView 实现
    引用:<AnchoranchorList={anchorContentCultureList}initCurIndex='shiming'/> Anchor.tsx代码//社区Tab下文化Tab页锚点importReact,{Rea......