.net的Websocket编程序入门

Posted 辅助园地

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.net的Websocket编程序入门相关的知识,希望对你有一定的参考价值。

被微信小程序的Wss协议给困扰了有一段时间了,那是睡也睡不好,饭也吃不香啊。找到的Demo要么是java的要么是nodejs的。虽然,我也准备弄nodejs了,但是,.net的Websocket不把它弄清楚,总觉的不得劲。经过查找资料和调试后,.net下ws和wss终于给弄清楚了。

ws全称是Websocket,我的理解就是Web下的socket编程。

wss就是网站端加了ssl协议后的websocket,在后面调试时还会提起。

在这里必须先感谢以下几位博主:

https://www.cnblogs.com/honghong75042/p/7570059.html

http://blog.csdn.net/lwpoor123/article/details/78391022

正是看了你们的文章,我才学会websocket。

转入正文,如果在vs环境下编写websocket,必须配置以下环境:

1、.net frame要安装4.5以上版本,如下图:

2、貌似win 7不支持websocket,所以最好装个win10

3、vs2010只支持.net到4.0,所以要安装个vs2012或以上吧,本人装了个vs2013。(先吐槽下vs2015,本人c盘本来还有30多个G,装了vs2015后只剩个几G,气死)

然后,就可以进行Websocket编写了,我在前面环境配置下给折腾了好长时间,为自己心疼下。

写个Demo吧,

客户端:

 <script ></script>

     <script type="text/javascript">


         var ws;

         $().ready(function () {

             $('#conn').click(function () {

                 ws = new WebSocket('ws://localhost:53768/WebSocketDemo.ashx');

                 //ws = new WebSocket('wss://localhost:44300/WebSocketDemo.ashx')

                 $('#tips').text('正在连接');

                 ws.onopen = function () {

                     $('#tips').text('已经连接');

                 }

                 ws.onmessage = function (evt) {

                     $('#tips').text(evt.data);

                 }

                 ws.onerror = function (evt) {

                     $('#tips').text(JSON.stringify(evt));

                 }

                 ws.onclose = function () {

                     $('#tips').text('已经关闭');

                 }

             });


             $('#close').click(function () {

                 ws.close();

             });


             $('#send').click(function () {

                 if (ws.readyState == WebSocket.OPEN) {

                     ws.send($('#content').val());

                 }

                 else {

                     $('#tips').text('连接已经关闭');

                 }

             });


         });

    </script>

html:

<div>


            <input id="conn" type="button" value="连接" />

            <input id="close" type="button" value="关闭" />

            <span id="tips"></span>

            <input id="content" type="text" />

            <input id="send" type="button" value="发送" />

        </div>

后台服务端:

必须包含如下命名空间:

using System.Net.WebSockets;

using System.Text;

using System.Threading;

using System.Threading.Tasks;

using System.Web;

using System.Web.WebSockets;

写在 一般处理程序 .ashx中:

 public void ProcessRequest (HttpContext context) {

        if (context.IsWebSocketRequest)

        {

            context.AcceptWebSocketRequest(ProcessChat);


        }

        

    }


    private async Task ProcessChat(AspNetWebSocketContext context)

    {

                 WebSocket socket = context.WebSocket;

            while (true)

            {

                if (socket.State == WebSocketState.Open)

                {

                    ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[2048]);

                    WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);

                    string userMsg = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);

                    userMsg = "你发送了:" + userMsg + "于" + DateTime.Now.ToLongTimeString();

                    buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(userMsg));

                    await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);

                }

                else

                {

                    break;

                }

            }

     }


调试:

这是ws调试,如果用wss调试,需要两步:

1、在vs环境中选中工程名,在下面选中ssl,如图

如原来为

WebSocket('ws://localhost:53768/XXX.ashx');

  改为:WebSocket('wss://localhost:44300/XXX.ashx')

这样,wss也可以调试了。

以上,就是.net 的websocket编程了,在微信后台也是一样可以的,如有疑问,请联系本人,只有交流才能进步。


以上是关于.net的Websocket编程序入门的主要内容,如果未能解决你的问题,请参考以下文章

创建 websocket 连接时出现 System.Net.Sockets.SocketException

WebSocket 连接到“ws://.../socket.io/”失败:WebSocket 握手期间出错:net::ERR_CONNECTION_RESET

WebSocket入门

WebSocket入门

socket.io入门,简易聊天室

对.Net WebSocket 和Socket的原理的思考