Открытие сокета на сервере

Открываю на сервере сокет.
Подключаюсь к нему через PUTTY
Всё что делает скрипт на сервере логирую в файл.
Ожидаю получить чат: на сервер приходит то, что я набрал в PUTTY; в PUTTY выводится то, что отправил сервер.

На самом деле вижу:

1) При подключении сокет на сервере принимает строку «SSH-2.0-PuTTY_Release_0.76», т.е. подключение к сокету, в принципе, происходит.
2) Пытаюсь что-то набирать в окне PUTTY, жать ENTER, больше ни чего не передаётся.
3) Скрипт выполняет socket_write(), но в PYTTY ни чего не появляется.
4) Скрипт блокируется на socket_read()
5) Скрипт разблокируется и socket_read() возвращает пустую строку после закрытия окна PUTTY

Кто может, объясните, что я не понимаю ?
Заранее спасибо !

PHP:
  1.  
  2. /////////записываем в файл ошибки/////
  3. set_error_handler(‘err_handler’,E_ALL);
  4. function err_handler($errno, $errmsg, $filename, $linenum) {
  5.    date_default_timezone_set(‘Europe/Moscow’);
  6.    $err  = «$errmsg = $filename = $linenum«;
  7.    $text = date(«H:i:s»).»   «.$err.«\r\n«;
  8.    $file_name=date(«Y_m_d»).«_error».«.txt»;
  9.  
  10.    $fp = fopen($file_name, «a» );
  11.    fwrite($fp, $text);
  12.    fclose($fp);  
  13. }
  14.  
  15.  
  16. /////////записываем в файл результаты выполнения/////
  17. function log_to_file($text){
  18.    date_default_timezone_set(‘Europe/Moscow’);
  19.    $text = date(«H:i:s»).»   «.$text.«\r\n«;
  20.    $file_name=date(«Y_m_d»).«_log».«.txt»;
  21.    $fp = fopen($file_name, «a» );
  22.    fwrite($fp, $text);
  23.    fclose($fp);  
  24. }
  25.  
  26. // Позволяет скрипту ожидать соединения бесконечно.
  27.  
  28. /////
  29. $address = ‘185.26.121.226’;  //le-control.ru
  30. $port = 8443;
  31.  
  32.  
  33. ///////создаём сокет
  34. if (($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
  35.     log_to_file(«socket_create() ПРОВАЛ: «. socket_strerror(socket_last_error()));
  36. }
  37. else{
  38.     log_to_file(«socket_create() УСЕХ: «. socket_strerror(socket_last_error()));
  39. }
  40.  
  41. if (socket_bind($sock, $address, $port) === false) {
  42.     log_to_file( «socket_bind() ПРОВАЛ: «. socket_strerror(socket_last_error($sock)) );
  43.     exit; //если такой порт уже открыт, значи скрипт уже запущен, второй раз запускать не нужно
  44. }
  45. else{
  46.     log_to_file( «socket_bind() УСПЕХ: «. socket_strerror(socket_last_error($sock)) );
  47. }
  48.  
  49. if (socket_listen($sock, 5) === false) {
  50.       log_to_file( «socket_listen() ПРОВАЛ: «. socket_strerror(socket_last_error($sock)) );
  51. }
  52. else{
  53.       log_to_file( «socket_listen() УСПЕХ: «. socket_strerror(socket_last_error($sock)) );
  54. }
  55.  
  56.  
  57. ////////////////////////////////////////////////
  58.  
  59. ////ждём подключение в бесконечном цикле
  60. do {
  61.     log_to_file(«ПЕРЕД ВЫЗОВОМ socket_accept»);
  62.     $msgsock = socket_accept($sock);
  63.     if ($msgsock=== false) {
  64.         log_to_file( «socket_accept() ПРОВАЛ «. socket_strerror(socket_last_error($sock)) );
  65.         break;
  66.     }
  67.     else
  68.     {
  69.         log_to_file( «socket_accept() УСПЕХ «. socket_strerror(socket_last_error($sock)) );
  70.         log_to_file( «////////////////////////////////////////////////»);
  71.     }  
  72.    
  73.     //устанавливаем не блокирующий режим
  74.     socket_set_nonblock($msgsock);
  75.    
  76.     //устанавливаем таймаут чтения 10000uS
  77.     socket_set_option($msgsock,SOL_SOCKET, SO_RCVTIMEO, array(«sec»=>0, «usec»=>10000));
  78.    
  79.     ////читаем и пишем в бесконечном цикле
  80.     do {
  81.         log_to_file( «ПЕРЕД ВЫЗОВОМ socket_read()» );
  82.         $buf = socket_read($msgsock, 2000, PHP_NORMAL_READ);
  83.         if (false === $buf) {
  84.             log_to_file( «socket_read(): ПРОВАЛ:». socket_strerror(socket_last_error($msgsock)) );
  85.             break;
  86.         }
  87.         else
  88.         {
  89.             log_to_file( «socket_read() УСПЕХ: buf = «.strlen($buf).» = «.$buf );
  90.         }
  91.        
  92.         usleep(10000);
  93.        
  94.         log_to_file( «ПЕРЕД ВЫЗОВОМ socket_write()» );
  95.         $msg = «SUCCESS!!!\r\n\r\n«;
  96.         $result=socket_write($msgsock, $msg, strlen($msg));
  97.         if($result===false){
  98.            log_to_file( «socket_write() ПРОВАЛ: «. socket_strerror(socket_last_error($msgsock)) );
  99.            break;
  100.         }
  101.         else{
  102.             log_to_file( «socket_write() УСПЕХ: «. $result );
  103.         }      
  104.        
  105.        
  106.     } while (true);
  107.     socket_close($msgsock);
  108.     log_to_file( «ВЫШЛИ ИЗ ЦИКЛА ЧТЕНИЯ-ЗАПИСИ. ВЫПОЛНИЛИ socket_close(msgsock)» );
  109.    
  110. } while (true);
 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *