我在过去的几个小时里一直在研究这个问题......我已经克服了消息的编码和解码。发送的消息被截断为接收数据的大小
但是,我现在面临着一个不同的问题。我可以下达指令,然而,每个命令的响应将被截断,以接收到的字符串的长度...
预期聊天结果:哦,亲爱的,我是152
接收到的聊天结果:哦
调试从服务器:
2011-11-23 23:22:14 System: Socket Resource id #7 created. 2011-11-23 23:22:14 System: Socket bound to 192.168.1.144:8000. 2011-11-23 23:22:14 System: Start listening on Socket. 2011-11-23 23:22:17 WebSocket: Resource id #9 CONNECTED! 2011-11-23 23:22:17 WebSocket: Requesting handshake... 2011-11-23 23:22:17 WebSocket: Key: 42MngFcIhXEKCLFloq6IYQ== 2011-11-23 23:22:17 WebSocket: Accept: raRUiMJ6z2bTY6pDrOf7K4Q56Fc= 2011-11-23 23:22:17 WebSocket: Origin: http://192.168.1.144 2011-11-23 23:22:17 WebSocket: Handshaking... 2011-11-23 23:22:17 WebSocket: Done handshaking... 2011-11-23 23:22:18 WebSocket: RECEIVED BEFORE DECODE: ¿õ1ÆÞT 2011-11-23 23:22:18 WebSocket: RECEIVED AFTER DECODE: age 2011-11-23 23:22:18 WebSocket: <age 2011-11-23 23:22:18 WebSocket: >Oh dear, I'm 152 2011-11-23 23:22:18 WebSocket: SENT BEFORE ENCODE: Oh dear, I'm 152 2011-11-23 23:22:18 WebSocket: SENT AFTER ENCODE: ¿õ1Æð
调试从客户:
个Socket Status: 0 Socket Status: 1 (open) Sent: age Received: Oh
编码和解码功能
function decode($msg) {
$this->console("RECEIVED BEFORE DECODE: $msg");
$len = $data = $decoded = $index = null;
$len = $msg[1] & 127;
if ($len === 126) {
$this->masks = substr($msg, 4, 4);
$data = substr($msg, 8);
$this->initFrame = substr($msg, 0, 4);
} else if ($len === 127) {
$this->masks = substr($msg, 10, 4);
$data = substr($msg, 14);
$this->initFrame = substr($msg, 0, 10);
} else {
$this->masks = substr($msg, 2, 4);
$data = substr($msg, 6);
$this->initFrame = substr($msg, 0, 2);
}
for ($index = 0; $index < strlen($data); $index++) {
$decoded .= $data[$index]^$this->masks[$index % 4];
}
$this->console("RECEIVED AFTER DECODE: $decoded");
return $decoded;
}
function encode($msg) {
$this->console("SENT BEFORE ENCODE: $msg");
$index = $encoded = null;
$len = strlen($msg);
for ($index = 0; $index < $len; $index++) {
$encoded .= $msg[$index]^$this->masks[$index % 4];
}
$encoded = $this->initFrame . $this->masks . $encoded;
$this->console("SENT AFTER ENCODE: $encoded");
return $encoded;
}
所以...经过多次调试,我仍然卡住了。我发现加密的消息是整个字符串。但是,通过PHP套接字发送的内容会被截断。 –