У друга на компе крутится бот, который принимает запросы по winsocket. Помогите приконектиться, я уже кучу вариантов из гугла перепробовал, пишет практически всегда одно и тоже: Код (Text): fsockopen(): unable to connect to 79.164.127.227:3337 Сейчас функцию коннекта я скопипастил такую: PHP: function connect() { $key1 = generateRandomString(32); $key2 = generateRandomString(32); $key3 = generateRandomString(8, false, true); $header = "GET /echo HTTP/1.1\r\n"; $header.= "Upgrade: WebSocket\r\n"; $header.= "Connection: Upgrade\r\n"; $header.= "Host: 79.164.127.227:3337\r\n"; $header.= "Origin: http://79.164.127.227\r\n"; $header.= "Sec-WebSocket-Key1: " . $key1 . "\r\n"; $header.= "Sec-WebSocket-Key2: " . $key2 . "\r\n"; $header.= "\r\n"; $header.= $key3; $socket = fsockopen(79.164.127.227, 3337, $errno, $errstr, 2); fwrite($socket, $header) or die('Error: ' . $errno . ':' . $errstr); $response = fread($socket, 2000); /** * @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated. * See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake */ return true; } function generateRandomString($length = 10, $addSpaces = true, $addNumbers = true) { $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}'; $useChars = array(); // select some random chars: for ($i = 0; $i < $length; $i++) { $useChars[] = $characters[mt_rand(0, strlen($characters) - 1)]; } // add spaces and numbers: if ($addSpaces === true) { array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' '); } if ($addNumbers === true) { array_push($useChars, rand(0, 9), rand(0, 9), rand(0, 9)); } shuffle($useChars); $randomString = trim(implode('', $useChars)); $randomString = substr($randomString, 0, $length); return $randomString; }
А я сам хз. Вот API бота. И я без понятия как с этим работать. Коннект удался, у друга просто был закрыт порт. Но при попытке что-то отправить, приходит хрень какая-то. Код (Text): 'O��s���V�]�Y)I�' Можете сами попробовать. Вот полный код, с которым я работаю. PHP: <?php class DeepBot { public $deep_ip = '79.164.127.227'; public $deep_port = 3337; private $socket = null; public function __construct() { $this->ws_connect(); } public function __destruct() { $this->ws_disconnect(); } public function sendData($data) { // send actual data: fwrite($this->socket, "\x00" . $data . "\xff") or die('Error:' . $errno . ':' . $errstr); $wsData = fread($this->socket, 2000); $retData = trim($wsData, "\x00\xff"); return $retData; } private function ws_connect() { $key1 = $this->generateRandomString(32); $key2 = $this->generateRandomString(32); $key3 = $this->generateRandomString(8, false, true); $header = "GET /echo HTTP/1.1\r\n"; $header.= "Upgrade: WebSocket\r\n"; $header.= "Connection: Upgrade\r\n"; $header.= "Host: " . $this->deep_ip . ":" . $this->deep_port . "\r\n"; $header.= "Origin: http://".$this->deep_ip."\r\n"; $header.= "Sec-WebSocket-Key1: " . $key1 . "\r\n"; $header.= "Sec-WebSocket-Key2: " . $key2 . "\r\n"; $header.= "\r\n"; $header.= $key3; $this->socket = fsockopen($this->deep_ip, $this->deep_port, $errno, $errstr, 2); fwrite($this->socket, $header) or die('Error: ' . $errno . ':' . $errstr); $response = fread($this->socket, 2000); /** * @todo: check response here. Currently not implemented cause "2 key handshake" is already deprecated. * See: http://en.wikipedia.org/wiki/WebSocket#WebSocket_Protocol_Handshake */ return true; } private function ws_disconnect() { fclose($this->socket); } private function generateRandomString($length = 10, $addSpaces = true, $addNumbers = true) { $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"§$%&/()=[]{}'; $useChars = array(); // select some random chars: for ($i = 0; $i < $length; $i++) { $useChars[] = $characters[mt_rand(0, strlen($characters) - 1)]; } // add spaces and numbers: if ($addSpaces === true) { array_push($useChars, ' ', ' ', ' ', ' ', ' ', ' '); } if ($addNumbers === true) { array_push($useChars, rand(0, 9), rand(0, 9), rand(0, 9)); } shuffle($useChars); $randomString = trim(implode('', $useChars)); $randomString = substr($randomString, 0, $length); return $randomString; } } $deep = new DeepBot(); $response = $deep->sendData("test"); echo '<pre>'; var_export($response); echo '</pre>'; // отладка unset($deep); die; ?>
B42FDUYPNfYJUHYVcTOONOIcLXAfDcCdSHXKD @alexblack, я правильно понимаю, что поддержка Websocket из коробки в PHP такая себе, и надо ставить это или это? Мне ещё для этого композером учиться пользоваться, чтобы сделать автолоудер... Или можно обойтись без всего этого?
Ну у меня все работает.Касательно твоего вопроса я не писал сам под это дело либу,но если ключ останется валидным несколько дней - могу попробовать написать.Я не стал особо заморачиваться и опробовал готовое решение,все отработало отлично: Код (Text): getUsers($offset, $limit) array(15) { [0]=> array(8) { ["user"]=> string(6) "moobot" ["points"]=> float(9101) ["watch_time"]=> float(43200) ["vip"]=> int(10) ["mod"]=> int(1) ["join_date"]=> string(27) "2015-02-21T12:51:44.1045925" ["last_seen"]=> string(27) "2015-09-26T10:26:12.5576299" ["vip_expiry"]=> string(27) "2015-02-21T12:51:44.1045925" } [1]=> array(8) { ["user"]=> string(9) "rider_god" ["points"]=> float(5994.5) ["watch_time"]=> float(7180) ["vip"]=> int(10) ["mod"]=> int(0) ["join_date"]=> string(27) "2015-02-21T12:51:44.1045925" ["last_seen"]=> string(27) "2016-08-28T19:31:05.9470592" ["vip_expiry"]=> string(27) "2015-12-22T02:54:02.7970875" } [2]=> array(8) { ["user"]=> string(8) "humstree" ["points"]=> float(96275) ["watch_time"]=> float(53951) ["vip"]=> int(10) ["mod"]=> int(2) ["join_date"]=> string(27) "2015-02-21T12:51:44.1045925" ["last_seen"]=> string(26) "2017-02-08T17:51:05.419409" ["vip_expiry"]=> string(27) "2017-01-22T02:51:47.1697578" } ##################################### Композер реально упрощает жизнь и он очень удобен. Ну я тебе кину архив,тебе останется распаковать его в нужную папку и можешь протестировать нужные тебе функции. https://yadi.sk/d/tKGRItOS3DaNGt
Жееееесть сколько там всего. Это реально всё нужно? Спасибо за готовый вариант, в любом случае.) Оно работает, я только одной вещи не пойму. Допустим, я вызвал PHP: $bot->getUserPoints('humstree') После выполнения команды соединение разрывается? В браузере оно как бы разрывается, но в функции makeRequest чот не разберу что происходит. Сложный код для меня.)
@Ganzal у тебя сейчас будет срыв шаблона, но у меня нет зависимостей. Всё что нужно для проекта написано вручную и работает как часы.
@Abyss о ну типа крут. Такого комментария ожидал? А не будет. Ты собственно всё что мне нужно уже сказал - "всё что нужно для ПРОЕКТА". То есть, проект всего один, не несколько. И нет репозитория готовых библиотек. Конечно композитор тут нафиг не нужен.
Да, а сколько нужно ? Шта ? Репа есть, не переживай, но не готовых библиотек, а самого проекта. Не нужен, нужен дирижёр.
Ну видимо ты не работаешь с фреймворками,такими например как Slim3 или Zend Framework 3.Там без композера никуда