2012-01-03 63 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