ClientWebSocket连接后,如何优雅的关闭?

中文命名法 2018-06-07 03:42:17
ClientWebSocket 客户端 = new ClientWebSocket();
bool 开关 = true;

async void 启动()
{
await 主客户端.ConnectAsync(new Uri("***"), CancellationToken.None);
监听();
}

async void 监听()
{
Byte[] 缓冲 = new Byte[8192];
while (开关)
{
WebSocketReceiveResult 结果 = await 主客户端.ReceiveAsync(new ArraySegment<Byte>(缓冲), CancellationToken.None);
解析(Encoding.Default.GetString(缓冲, 0, 结果.Count));
}
}

void 关闭()
{
开关 = false;
客户端.Abort();
}
我原本以为调用 关闭() 就关闭了。但是调试发现执行到 客户端.Abort() 时,程序还在等待ReceiveAsync 的结果,导致异常。正确的关闭方法是怎样的呢?请教。
...全文
3207 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
QXH222 2018-11-20
  • 打赏
  • 举报
回复
wss如何连接啊,我一直连接不上,请教一下
  • 打赏
  • 举报
回复
可以定义一个全局变量,
开始处理数据的时候变量设置为true,
结束处理数据的时候变量设置为false,
关闭的时候判断变量如果为true,循环等待,直到为false时关闭
尔闻一生 2018-06-07
  • 打赏
  • 举报
回复
_connectedSocket.Shutdown(SocketShutdown.Both); _connectedSocket.Close(); 关闭Socket,这时候接收会立刻完成,判断开关,如果关闭了就不解析了

110,570

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧