qqlight-websocket icon indicating copy to clipboard operation
qqlight-websocket copied to clipboard

C#作为客户端连接,老是报被远程连接中断,是个什么情况和原因啊?

Open amwihtfei opened this issue 4 years ago • 8 comments

日志显示“Connection close frame” 能接收一阵子数据,然后断掉

代码如下 //todo 接受推送过来的消息和事件,在这里面进行解析和分发 async void StartReceiving(ClientWebSocket client) { while (true) { var array = new byte[4096]; WebSocketReceiveResult result = await client.ReceiveAsync(new ArraySegment(array), CancellationToken.None); await client.CloseOutputAsync(WebSocketCloseStatus.Empty,"",CancellationToken.None);

            if (result != null)
            {
                if (result.MessageType == WebSocketMessageType.Text)
                {
                    string msg = Encoding.UTF8.GetString(array, 0, result.Count);
                    Console.ForegroundColor = ConsoleColor.DarkBlue;
                    Console.WriteLine("--> {0}", msg);
                    Console.ForegroundColor = ConsoleColor.DarkGray;
                 
                    //todo 对消息进行解析,事件分发

                   JObject msgobj = (JObject)JsonConvert.DeserializeObject(msg);//或者JObject jo = JObject.Parse(jsonText);
                    switch (msgobj["event"].ToString())
                    {
                        case "message":
                            recieveMsgEvent(msgobj);
                            break;
                        case "friendRequest":break;
                        case "friendChange":break;
                        case "groupMemberIncrease":break;
                        case "groupMemberDecrease":break;
                        case "adminChange":break;
                        case "groupRequest":break;
                        case "receiveMoney":break;
                    }
                }
            }
        }
    }

amwihtfei avatar Feb 15 '20 15:02 amwihtfei

await client.CloseOutputAsync(WebSocketCloseStatus.Empty,"",CancellationToken.None)

这句的作用是什么

chocolatl avatar Feb 15 '20 15:02 chocolatl

await client.CloseOutputAsync(WebSocketCloseStatus.Empty,"",CancellationToken.None)

这句的作用是什么

这句是关闭异步的貌似,但是我之前没写这句也是一样的;会被远程断开连接

amwihtfei avatar Feb 16 '20 00:02 amwihtfei

看日志应该是客户端主动请求关闭的,你需要自己检查一下代码是否有问题

chocolatl avatar Feb 16 '20 00:02 chocolatl

看日志应该是客户端主动请求关闭的,你需要自己检查一下代码是否有问题

image 估摸着是的,就是现在还不知道错在哪个地方 感谢🙏

amwihtfei avatar Feb 16 '20 00:02 amwihtfei

是不是发心跳包了,一发就会断开连接,禁掉就不会了

nlysh007 avatar Feb 16 '20 21:02 nlysh007

是不是发心跳包了,一发就会断开连接,禁掉就不会了

那可能是我代码有问题,有空我看看

chocolatl avatar Feb 18 '20 15:02 chocolatl

是不是发心跳包了,一发就会断开连接,禁掉就不会了

方便给个心跳包这块的处理example?我这边刚接触c#,有点拿他没办法

amwihtfei avatar Feb 20 '20 02:02 amwihtfei

是不是发心跳包了,一发就会断开连接,禁掉就不会了

方便给个心跳包这块的处理example?我这边刚接触c#,有点拿他没办法

不熟悉c#,我用的aardio,

nlysh007 avatar Feb 24 '20 02:02 nlysh007