`
holoblog
  • 浏览: 1236107 次
博客专栏
E0fcf0b7-6756-3051-9a54-90b4324c9940
SQL Server 20...
浏览量:19040
文章分类
社区版块
存档分类
最新评论

WebSocket握手服务端响应算法『java』

 
阅读更多
/ **
*GET / HTTP/1.1
Upgrade: websocket
Connection: Upgrade
Host: localhost:50000
Sec-WebSocket-Origin: http://localhost
Sec-WebSocket-Key: BYEBkScKdCuqSKY2Mf6CIg==
Sec-WebSocket-Version: 8
Cookie:
*/
publicHashMap<String,String>getRequestHeader(byte[]data){
StringrequestHeader=newString(data);
requestHeader=requestHeader.substring(0,requestHeader.indexOf("\r\n\r\n"));
String[]reqarr=requestHeader.split("\r\n");
reqHeader=newHashMap<String,String>();
for(inti=0;i<reqarr.length;i++){
StringrequestHeaderLine=reqarr[i];
if(requestHeaderLine.toUpperCase().startsWith("GET")||requestHeaderLine.toUpperCase().startsWith("POST")){
String[]first=requestHeaderLine.split(" ");
if(first.length==3){
Stringmethod=first[0];
Stringlocation=first[1].replaceAll("\\s","");
Stringprotocol=first[2].split("/")[0];
StringprotocolVersion=first[2].split("/")[1];
reqHeader.put("Method",method);
reqHeader.put("Location",location);
reqHeader.put("Protocol",protocol);
reqHeader.put("ProtocolVersion",protocolVersion);
}
}else{
String[]reqlinearr=requestHeaderLine.split(":");
if(reqlinearr.length==2){
Stringkey=reqlinearr[0];
Stringvalue=reqlinearr[1].replaceAll("\\s","");
reqHeader.put(key,value.replaceAll("\\s",""));
}
}
}
returnreqHeader;
}
publicStringgetResponseHeader(){
StringoriginKey=reqHeader.get("Sec-WebSocket-Key")+"258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
java.security.MessageDigestalga=null;
byte[]digesta=null;
try{
alga=java.security.MessageDigest.getInstance("SHA-1");
alga.update(originKey.getBytes());
 digesta=alga.digest();
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
byte[]respKey=org.apache.commons.codec.binary.Base64.encodeBase64(digesta);
Stringheader="HTTP/1.1 101 Switching Protocols\r\n"+
"Upgrade: Websocket\r\n"+
"Connection: Upgrade\r\n"+
"Sec-WebSocket-Accept: "+newString(respKey)+"\r\n\r\n";
returnheader;
}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics