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)); }
public void Close(string closeMessage, WebSocketCloseStatusCode closeStatusCode) { //关系close之前需要先发送关闭帧 WebSocketMessage message = messageHandler.CreateCloseMessage(closeMessage, closeStatusCode); Send(message); serverSocket.Shutdown(SocketShutdown.Both); serverSocket.Close(); serverSocket.Dispose(); }