从.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();
}
}
}
答案 0 :(得分:2)
您运行的操作系统和浏览器是什么?接受WebSocket请求需要Windows 8(或Server 2012)或更高版本。