ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C#原生WebSocket客户端ClientWebSocket使用

2021-11-09 17:04:11  阅读:504  来源: 互联网

标签:CancellationToken None WebSocket C# clientWebSocket serverUri new ClientWebSocke


WebSocket框架有很多,现在经常用到Supersocket,现在要封装一个dll,里面用到WebSocket,但是如果dll里面引用第三方框架的话,引用自己封装的dll时还需要引用一堆额外的包,这就显得有点臃肿,因为只有一个客户端的WebSocket用原生的ClientWebSocket即可;

官方文档:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.websockets.clientwebsocket?view=netframework-4.7.2&f1url=%3FappId%3DDev16IDEF1%26l%3DZH-CN%26k%3Dk(System.Net.WebSockets.ClientWebSocket);k(TargetFrameworkMoniker-.NETFramework,Version%253Dv4.7.2);k(DevLang-csharp)%26rd%3Dtrue

连接并发送消息:

public static ClientWebSocket clientWebSocket;

        public static Uri serverUri;


        public SocketClient(string ip, int port)
        {var webSocketUrl = $@"ws://{ip}:{port}";
            clientWebSocket = new ClientWebSocket();
            serverUri = new Uri(webSocketUrl);
            clientWebSocket.ConnectAsync(serverUri, CancellationToken.None).Wait();
        }

        public async Task SendMessageAsync(string Msg)
        {
            if(clientWebSocket.State != WebSocketState.Open)
            {
                await clientWebSocket.ConnectAsync(serverUri, CancellationToken.None);
            }
            if (clientWebSocket.State == WebSocketState.Open)
            {
                ArraySegment<byte> bytesToSend = new ArraySegment<byte>(Encoding.UTF8.GetBytes(Msg));
                await clientWebSocket.SendAsync(bytesToSend, WebSocketMessageType.Text, true, CancellationToken.None);
            }
        }

接收消息

          ArraySegment<byte> bytesReceived = new ArraySegment<byte>(new byte[1024]);
                WebSocketReceiveResult result = await ws.ReceiveAsync(bytesReceived, CancellationToken.None);
                Console.WriteLine(Encoding.UTF8.GetString(bytesReceived.Array, 0, result.Count));

ClientWebSocket里面的方法都是异步的,如果同步方法调用异步:

1.不需要获取返回值的:

clientWebSocket.ConnectAsync(serverUri, CancellationToken.None).Wait();

2.需要获取返回值的

var result = clientWebSocket.ConnectAsync(serverUri, CancellationToken.None).GetAwaiter().GetResult();

 

标签:CancellationToken,None,WebSocket,C#,clientWebSocket,serverUri,new,ClientWebSocke
来源: https://www.cnblogs.com/jf-ace/p/15529769.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有