协议类型
ws://
wss:// 加密
//开始连接---------------------------------------------
var webSocket = new ClientWebSocket();
webSocket.Options.KeepAliveInterval = new TimeSpan(0, 0, 30);
//不使用代理
webSocket.Options.Proxy = null;
//使用默认凭据
webSocket.Options.UseDefaultCredentials = true;
//异步连接,不设置取消令牌
IAsyncResult asyncResult = webSocket.ConnectAsync(uri, CancellationToken.None);
bool isSuccess = asyncResult.AsyncWaitHandle.WaitOne(TIMEOUT, true);
if(isSuccess && webSocket.State == WebSocket(4000,true))
{
//连接成功
}
//断开连接---------------------------------------------
if(_webSocket.State == WebSocketState.Open)
{
IAsyncResult resultAsync = _webSocket.CloseOutputAsync(WebSocketCloseStatus.NormalClosure, "Closing", CancellationToken.None);
}
//发送---------------------------------------------
if (_webSocket.State != WebSocketState.Closed)
{
await _webSocket.SendAsync(
buffer
, WebSocketMessageType.Binary
, true
, CancellationToken.None)
.ConfigureAwait(false);//不需要回到await前的线程
}
//接收---------------------------------------------
if (_webSocket.State != WebSocketState.Closed && !cancelToken.IsCancellationRequested)
{
WebSocketReceiveResult receiveResult = await _webSocket.ReceiveAsync(buffer, CancellationToken.None).ConfigureAwait(false);
if (_webSocket.State == WebSocketState.Open && receiveResult.MessageType != WebSocketMessageType.Close)
{
int length = receiveResult.Count;
if (length > 0)
OnRead(buffer.Array, buffer.Offset, length);//解析数据
}
}