Я действительно работал над этим в течение последних нескольких часов ... Я преодолел кодирование и расшифровку сообщений.Сообщение отправлено усеченным до размера полученных данных
Однако, теперь я сталкиваюсь с проблемой разницы. Я могу выдавать команды, однако, ответы на каждую команду обрезаются, что и длины полученной строки ...
ОЖИДАЕМЫЕ результат чата: О, дорогая, я 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, усечено. –