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


    最近两天公司 要用到 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

  • 相关阅读:
    css深入理解vertical-align
    css深入理解之overflow
    深入理解CSS中的margin
    深入理解line-height
    深入理解css之float
    javascript正则表达式
    深入理解css之absolute
    _splitpath / _wsplitpath 将绝对路径分割为盘符、路径、文件名、扩展名。
    cocos2d-x环境的搭建之xcode-本人亲历成功搭建!
    lua语法
  • 原文地址:https://www.cnblogs.com/hailexuexi/p/16854341.html
Copyright © 2020-2023  润新知