PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: обмен сокетами на сервере между клиентами
timofey1234
Отправлено: 11 Февраля, 2018 - 19:26:56
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Февр. 2018  


Помог: 0 раз(а)




CODE (php):
скопировать код в буфер обмена
  1. //один раз инициализировать 127.0.0.1:8080/this.php
  2.  
  3.  
  4. $NULL           = NULL;
  5. $address        = "127.0.0.1";
  6. $port           = 7272;
  7. $max_clients    = 10;
  8. $client_sockets = array();
  9. $master         = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  10. $res            = true;
  11. $res &= @socket_bind($master, $address, $port);
  12. $res &= @socket_listen($master);
  13. $dob = NULL;
  14.  
  15. if(!$res)
  16. {
  17.     die ("no\n");
  18. }
  19. $abort = false;
  20. $read = array($master);
  21. while(!$abort)
  22. {
  23.     $num_changed = socket_select($read, $NULL, $NULL, 0, 10);
  24.    
  25.     /* Изменилось что-нибудь? */
  26.     if ($num_changed)
  27.     {
  28.         /* Изменился ли главный сокет (новое подключение) */
  29.         if(in_array($master, $read))
  30.         {
  31.             if(count($client_sockets) < $max_clients)
  32.             {
  33.                 $client_sockets[]= socket_accept($master);
  34.  
  35.             }
  36.         }
  37.        
  38.         /* Цикл по всем клиентам с проверкой*/
  39.         foreach($client_sockets as $key => $client)
  40.         {
  41.             usleep(500000);
  42.  
  43.             if(in_array($client, $read))
  44.             {
  45.                 if($key=="0"){
  46.                     $input = socket_read($client, 1024);
  47.                     $dob = $input;
  48.                 }
  49.  
  50.                 if($input === false)
  51.                 {
  52.                     socket_shutdown($client);
  53.                     unset($client_sockets[$key]);
  54.                 }
  55.                 else
  56.                 {
  57.                     if($key=="1"){
  58.                         if (!@socket_write($client, $dob) )
  59.                         {
  60.                             socket_close($client);
  61.                             unset ( $client_sockets[$key] ) ;
  62.                         }
  63.                     }
  64.                 }
  65.  
  66.                 if($input == 'exit')
  67.                 {
  68.                     socket_shutdown($master);
  69.                     $abort = true;
  70.                 }
  71.  
  72.             }// END IF in_array
  73.  
  74.         } // END FOREACH
  75.  
  76.     } // END IF ($num_changed)
  77.  
  78.     $read = $client_sockets;
  79.     $read[] = $master;
  80.    
  81. } // END WHILE

Это работает на локальном сервере. С веб технологиями серверов в сети полный ноль.
Уважаемые гуру, подскажите, если этот или подобный скрипт будет на реальном хостинге, будет ли он работать, если в место локального адреса указать адрес или ip хоста?
После того как первый подключенный клиент он же передатчик запустит этот скрипт, то сразу начинает передавать пакеты на порт 7272. Теперь если другой клиент подключиться к 127.0.0.1:7272 то он начинает принимать пакеты от первого, согласно условию: 0 передатчик, 1 и остальные принимающие. Извините, если вопрос кажется глупым. Спасибо.


Отредактировано модератором: armancho7777777, 12 Февраля, 2018 - 14:37:40
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« HTTP и PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB