【发布时间】:2014-01-06 20:40:27
【问题描述】:
从 .NET 4.5 FW 开始,内置了对 WebSockets 处理的支持。
http://msdn.microsoft.com/en-us/library/system.net.websockets.websocket(v=vs.110).aspx
在 JS 中创建 WebSocket() 实例的定义很简单。 另外...使用 .NET 4.5 在 C# 中处理 WebSocket 请求的方法也很简单... 所以我不明白为什么在服务器端代码中传入的数据包不对应:
listenerContext.Request.IsWebSocketRequest
它会响应 400 代码(在 else 块中)。
我的客户代码:
<script>
function connect() {
var ws = new WebSocket("ws://localhost:80/wsDemo/");
ws.onopen = function () {
alert("About to send data");
ws.send("Hello World");
alert("Message sent!");
};
ws.onmessage = function (evt) {
alert("About to receive data");
var received_msg = evt.data;
alert("Message received = "+received_msg);
};
ws.onclose = function () { alert("Connection is closed..."); };
};
window.load = connect;
</script>
服务器端代码:
public async void Start(string listenerPrefix)
{
HttpListener listener = new HttpListener();
listener.Prefixes.Add(listenerPrefix);
listener.Start();
Console.WriteLine("Listening...");
while (true)
{
HttpListenerContext listenerContext = await listener.GetContextAsync();
if (listenerContext.Request.IsWebSocketRequest)
{
ProcessRequest(listenerContext);
}
else
{
listenerContext.Response.StatusCode = 400;
listenerContext.Response.Close();
}
}
}
【问题讨论】:
标签: c# javascript websocket .net-4.5 httplistener