.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