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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)