public WebSocketMessage CreateCloseMessage(string errorMessage, WebSocketCloseStatusCode closeStatusCode)
        {
            byte[] error = Encoding.UTF8.GetBytes(errorMessage.Trim());
            if (error.Length > 123)
            {
                throw new Exception("close frame payload data length must be 0-125");
            }
            List <WebSocketFragment> fragments = new List <WebSocketFragment>();
            List <byte> list       = new List <byte>();
            Byte        firstByte  = 0x88;
            Byte        secondByte = (Byte)error.Length;

            list.Add(firstByte);
            list.Add(secondByte);
            for (int j = 0; j < 2; j++)
            {
                Byte b = (Byte)((int)closeStatusCode >> 8 * j);
                list.Add(b);
            }
            for (int i = 0; i < error.Length; i++)
            {
                list.Add(error[i]);
            }
            WebSocketFragment fragment = new WebSocketFragment(list.ToArray());

            fragments.Add(fragment);
            return(new WebSocketMessage(fragments));
        }
示例#2
0
        public void Close(string closeMessage, WebSocketCloseStatusCode closeStatusCode)
        {
            //关系close之前需要先发送关闭帧
            WebSocketMessage message = messageHandler.CreateCloseMessage(closeMessage, closeStatusCode);

            Send(message);
            serverSocket.Shutdown(SocketShutdown.Both);
            serverSocket.Close();
            serverSocket.Dispose();
        }