0

ASP.NET 4.0 (C#) を使用して単純な HTML5 Websockets アプリケーションを作成する方法。私の問題は、Websocket の作成に関するものです。以下は試したコードです...

try
{
    var listener = new TcpListener(IPAddress.Loopback, 9988);
    listener.Start();                
    using (var client = listener.AcceptTcpClient())
    using (var stream = client.GetStream())
    using (var reader = new StreamReader(stream))
    using (var writer = new StreamWriter(stream))
    {
        writer.WriteLine("HTTP/1.1 101 Web Socket Protocol Handshake");
        writer.WriteLine("Upgrade: WebSocket");
        writer.WriteLine("Connection: Upgrade");
        writer.WriteLine("WebSocket-Origin: http://localhost:9988");
        writer.WriteLine("WebSocket-Location: ws://localhost:8181/websession");
        writer.WriteLine("");
    }
    listener.Stop();
}
catch (Exception ex)
{
    ClientScript.RegisterClientScriptBlock(this.GetType(), "", ex.Message);
}

そして、HTMLコードは次のとおりです...!

<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title></title>
    <script type="text/javascript">
        var status = '';
        function conStatus(state) {
            return (state == 0) ? 'Connecting..!' : (state == 1) ? 'Opened..!' : (state == 2) ? 'Closing..!' : 'Closed..!';
        }
        function WebSocketTest() {
            if ("WebSocket" in window) {
                try {
                    debugger;
                    var connection = new WebSocket('ws://localhost:9988');
                    status += '<br/>Socket Status: ' + conStatus(connection.readyState);

                    connection.onopen = function () {
                        status += 'Socket Opened..!';
                    };

                    connection.onmessage = function () {
                        status += 'Socket received a message..!';
                    };
                    connection.onclose = function () {
                        status += 'Socket Closed..!';
                    };
                    connection.send('Hello World..!');
                }
                catch (exception) {
                    status += '<br/>EXCEPTION: ' + exception;
                }
            }
            else {
                status += "Your Browser does not support WebSockets...!"
            }
            document.write(status);
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div id="sse">
        <a href="javascript:WebSocketTest()">Run WebSocket</a>
    </div>
    <div id="status">
    </div>
    </form>
</body>
</html>

このファイルを実行すると、ページがオンロードし続けます..結果が表示されません..! 解決策を教えてください....よろしくお願いします....

4

2 に答える 2

1

Websocket の実装には、単純な TcpListener 以上のものが必要です。すべてのプラットフォームで WebSocket をサポートするためにPokeInを試すことも、ソリューションを ASP.NET 4.5 に更新して IIS 8 を使用することもできます。

于 2012-07-06T06:10:46.477 に答える
1

サーバーにいくつかの変更を加える必要があります。仕様のハンドシェイクセクションを読むことから始めるのが最善です。少なくとも、Sec-WebSocket-Accept ヘッダーを応答に追加する必要があります。クライアント要求で Sec-WebSocket-Version と Sec-WebSocket-Protocol を確認することも検討できます。

この後、ハンドシェイクを完了してすぐに接続を閉じるサーバーが必要です。tcp クライアントを無期限に維持し、クライアントが閉じるか、閉じることを要求した場合、またはサーバーがシャットダウンしたい場合にのみ閉じる必要があります。

クライアント コードも更新する必要があります。によって求められる最初のハンドシェイクnew WebSocket(...)は非同期です。コールバックが実行されるまで、接続変数を使用することはできませんonopen(そのため、行をそこに移動しますconnection.send('Hello World..!'))。

その後、仕様のデータ フレーミングセクションを読んで、メッセージの送受信方法を確認する必要があります。

これにより、かなりの量の作業が行われます。代わりに、既存のオープン ソース サーバーを使用する方が速い場合があります。私自身は使っていませんが、フレックは評価が高いようで、使いやすそうです。

于 2012-07-03T12:27:40.343 に答える