我在過去的幾個小時裏一直在研究這個問題......我已經克服了消息的編碼和解碼。發送的消息被截斷爲接收數據的大小
但是,我現在面臨着一個不同的問題。我可以下達指令,然而,每個命令的響應將被截斷,以接收到的字符串的長度...
預期聊天結果:哦,親愛的,我是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套接字發送的內容會被截斷。 –