2013-08-07 7 views
2

내가 크롬웹 소켓 핸드 쉐이크

크롬 반환에 동의되는 핸드 쉐이크를 할 수있는 방법을 찾는하고 있지 않다

Node.js를 가진 웹 소켓 연결을 관리 코드를 구축을 위해 노력하고있다 "웹 소켓 연결 'WS : //127.0.0.1 : 8888 /'실패 : 오류 웹 소켓 핸드 쉐이크시 : 초 - 웹 소켓 수락 "이

< < >>>

을 불일치3210

var http=require("http"); 
var crypto=require("crypto"); 

var server=http.createServer(function(req,res){ 

res.writeHeads("200","content-type:text/plain"); 
res.end(); 


    }); 

    server.on("upgrade",function(req,socket,head){ 

     for(var item in req.headers){ 
console.log(item); 
console.log(req.headers[item]); 
     } 


var GUID="258EAFA5-E914-47DA-95CA-C5AB0DC85B11";  

var secKey=req.headers["sec-websocket-key"]; 


var sha=crypto.createHash("sha1"); 
secKey+=GUID; 
secKey=sha.update(secKey).digest("base64"); 

var key64=new Buffer(secKey); 
key64=key64.toString("base64"); 



console.log(key64); 

var headersReturn='HTTP/1.1 101 Switching Protocols\r\n'; 
headersReturn+='Upgrade: websocket\r\n'; 
headersReturn+='Connection: Upgrade\r\n'; 
headersReturn+='Sec-WebSocket-Accept:'+key64+"\r\n\r\n"; 

var boo=socket.write(headersReturn); 

console.log(headersReturn); 

socket.on("connect",function(){console.log("success");}); 
socket.on("data",function(data){ 
console.log(data); 
    });  

     }); 

     server.listen(8888,"127.0.0.1",function(){ 

console.log("server is on 8888"); 



      }); 

< < < >>>>

희망 사람이없는 것을 볼 것입니다.

답변

0

코드의 문제점은 base64를 두 번 시도하는 것입니다. 이미 base64에있는 secKey.Its를 base64 할 필요가 없습니다.

다음 줄을 주석으로 작성하십시오.

var key64=new Buffer(secKey); 
key64=key64.toString("base64"); 

위의 주석 처리 된 코드 뒤에이 코드를 추가하십시오.

var key64 = secKey; 

위의 수정 후 오류가 사라졌습니다.

관련 문제