.NET 4.5中的HttpListener无法将套接字识别为WebSocket

时间:2013-12-18 15:26:51

标签: c# javascript websocket .net-4.5 httplistener

从.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();
            }
        }
    }

1 个答案:

答案 0 :(得分:2)

您运行的操作系统和浏览器是什么?接受WebSocket请求需要Windows 8(或Server 2012)或更高版本。

相关问题