Windows 8 Store Apps學習(63) 通訊: WebSocket

來源:互聯網
上載者:User

介紹

重新想象 Windows 8 Store Apps 之 通訊

Socket - 與 WebSocket 服務端做 Text 通訊

Socket - 與 WebSocket 服務端做 Stream(Binary) 通訊

樣本

WebSocket 的服務端

WebServer/WebSocketServer.ashx.cs

/* * WebSocket 通訊協定的服務端 *  * 需要在 iis 啟用 WebSocket 通訊協定:控制台 -> 程式和功能 -> 啟用或關閉 Windows 功能 -> 開啟 iis 的 WebSocket 通訊協定 */    using System;using System.IO;using System.Net.WebSockets;using System.Text;using System.Threading;using System.Web;    namespace WebServer{    public class WebSocketServer : IHttpHandler    {        // 接收資料的緩衝區的最大大小        private int _maxBufferSize = 64 * 1024;            public void ProcessRequest(HttpContext context)        {            try            {                // HttpContext.AcceptWebSocketRequest() - 接受一個 WebSocket 請求                context.AcceptWebSocketRequest(async wsContext => // AspNetWebSocketContext                {                    try                    {                        byte[] receiveBuffer = new byte[_maxBufferSize];                        ArraySegment<byte> buffer = new ArraySegment<byte>(receiveBuffer);                            // AspNetWebSocketContext.WebSocket - 擷取當前內容相關的 WebSocket 對象                        WebSocket socket = wsContext.WebSocket;                            // HTTP 握手完成                        if (socket.State == WebSocketState.Open)                        {                            var outputString = "WebSocket Connected: " + DateTime.Now.ToString("mm:ss");                            ArraySegment<byte> outputBuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(outputString));                                // WebSocket.SendAsync() - 發送資料                            //     WebSocketMessageType.Text - 發送的是文本資料                            //     WebSocketMessageType.Binary - 發送的是位元據                            await socket.SendAsync(outputBuffer, WebSocketMessageType.Text, true, CancellationToken.None);                        }                            // HTTP 握手完成                        while (socket.State == WebSocketState.Open)                        {                            // WebSocket.ReceiveAsync() - 接收資料,返回 WebSocketReceiveResult 對象                            WebSocketReceiveResult receiveResult = await socket.ReceiveAsync(buffer, CancellationToken.None);                                // WebSocketReceiveResult.MessageType - 接收到的資料的類型(WebSocketMessageType 枚舉)                            //     WebSocketMessageType.Text - 收到的是文本資料                            //     WebSocketMessageType.Binary - 收到的是位元據                            //     WebSocketMessageType.Close - 收到的是來自用戶端的 WebSocket 關閉的訊息                            if (receiveResult.MessageType == WebSocketMessageType.Close)                            {                                // WebSocket.CloseAsync() - 關閉 WebSocket                                await socket.CloseAsync(                                    receiveResult.CloseStatus.GetValueOrDefault(),                                    receiveResult.CloseStatusDescription,                                    CancellationToken.None);                                    return;                            }                                    int offset = receiveResult.Count;                                // WebSocketReceiveResult.EndOfMessage - 訊息是否被完全接收                            while (receiveResult.EndOfMessage == false)                            {                                // WebSocket.ReceiveAsync() - 接收資料,返回 WebSocketReceiveResult 對象                                receiveResult = await socket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer, offset, _maxBufferSize - offset), CancellationToken.None);                                offset += receiveResult.Count;                            }                                // 收到文本資料                            if (receiveResult.MessageType == WebSocketMessageType.Text)                            {                                string receivedText = Encoding.UTF8.GetString(receiveBuffer, 0, offset);                                string sendText = "server to client: \"" + receivedText + "\"";                                    // 發送文本資料到用戶端                                ArraySegment<byte> outputBuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(sendText));                                await socket.SendAsync(outputBuffer, WebSocketMessageType.Text, true, CancellationToken.None);                            }                            // 收到位元據                            else if (receiveResult.MessageType == WebSocketMessageType.Binary)                            {                                string sendText = "server to client: binary message received, size: " + receiveResult.Count + " bytes";                                    // 發送文本資料到用戶端                                ArraySegment<byte> outputBuffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(sendText));                                await socket.SendAsync(outputBuffer, WebSocketMessageType.Text, true, CancellationToken.None);                            }                        }                    }                    catch (Exception ex)                    {                                                }                });            }            catch (Exception ex)            {                                }        }            public bool IsReusable        {            get            {                return false;            }        }    }}

1、示範如何通過 MessageWebSocket 與 WebSocket 服務端做 Text 通訊

Communication/Socket/MessageWebSocketDemo.xaml

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/net/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.