2012-01-03 58 views
3

我有一個問題。當我想要實現WebSocket服務器時,服務器無法將數據發送到客戶端(在Chrome 16中)。例如,發送文本「Hello」,服務器將數據幀「0x81 0x05 0x48 0x65 0x6c 0x6c 0x6f」發送給客戶端,但瀏覽器無法接收數據。這段代碼錯了嗎?WebSocket服務器數據組幀(RFC6455)

sub getSendDataNoMask{ 
    my $dataStr="Hello"; 
    my @ret; 

    push(@ret,pack("H*","81")); 
    push(@ret,pack("H*","05")); 
    push(@ret,$dataStr); 

    return join("",@ret); 
} 
+0

您需要說明您是如何發送數據的 - 您如何處理getSendDataNoMask的返回值? – mob 2012-01-03 18:01:40

+0

返回值是套接字發送數據,像這樣,$ socket-> send(getSendDataNoMask());只是這個數據,沒有更多... – Random 2012-01-03 18:13:15

回答

0

從Chrome Javascript控制檯得到什麼錯誤?

您也沒有發佈握手代碼(發生問題的可能性越大)。你確定握手成功完成嗎?換句話說,您是否在瀏覽器中看到了onopen事件?

var ws = WebSocket("ws://myhost:6080/websocket"); 
ws.onopen = function (e) { 
    console.log("connection opened"); 
}; 
ws.onmessage 
    console.log("Got data: " + e.data); 
}; 

如果您沒有收到opopen事件,則握手從未成功完成。如果您正在進行onopen事件,那麼我會嘗試以相反方向發送數據,並確保您可以在嘗試發送之前從您的perl服務器接收和解碼幀。

+0

完整代碼:http://ra.ndom.me/code/webSocket.txt – Random 2012-02-07 08:58:11

+0

HTML代碼:http://ra.ndom.me/code/test.html – Random 2012-02-07 09:01:29

+0

@Random,感謝您的代碼,但您是否也可以回答我的問題。目前我很忙,爲你測試你的代碼。 – kanaka 2012-02-13 23:14:42