这个是我解析 websocket 的代码,现在有一个小缺陷还不是很完善,当数据长度 大于 125 的时候就解析不出来了。 由于本人在二进制的运算上非常薄弱,所以在此请教一下大家。还望指点迷津。
// 这句代码可以获取到客户端传来的数据 byte[] bytesData = outputStream.toByteArray(); if (bytesData.length < 1) { return null; } int opcode = bytesData[0] & 0x0f; if (opcode == 8) { webSocketExchange.setWebSocketEnum(WebSocketEnum.CLOSE); return webSocketExchange; } if (bytesData.length < 2) { return null; } int payloadLength = (bytesData[1] & 0x7f); if(payloadLength < 1){ return null; } if(payloadLength == 126){ // TODO 需要研究下怎么获取数据长度 } else if(payloadLength == 127){ // TODO 需要研究下怎么获取数据长度 } if(bytesData.length < (payloadLength + 6)){ return null; } byte[] mask = Arrays.copyOfRange(bytesData, 2, 6); byte[] payloadData = ArrayscopyOfRange(bytesData, 6, payloadLength + 6); if(payloadData.length < payloadLength){ return null; } for (int i = 0; i < payloadData.length; i++) { payloadData[i] = (byte) (payloadData[i] ^ mask[i % 4]); } ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); outputStream.write(payloadData); webSocketExchange.setLength(6 + outputStream.size()); webSocketExchange.setOutputStream(outputStream); webSocketExchange.setWebSocketEnum(WebSocketEnum.MESSAGE); 
Select Language