Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Cокеты - не пойму в чём ошибка
Форумы портала PHP.SU » » Вопросы новичков » Cокеты - не пойму в чём ошибка

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

1. nordghost - 02 Апреля, 2012 - 17:01:50 - перейти к сообщению
Вот сам код
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $setings=parse_ini_file("settings/senddataconfig.ini");
  4. $port=10001;
  5. $addres='192.168.168.136';
  6.         $socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  7.         socket_bind($socket, $addres, $port);
  8.                 while(true){
  9.                         socket_listen($socket, 5);
  10.                         $msgsock=socket_accept($socket);
  11.                         $rgBuf=socket_read($msgsock, 1024);
  12.                         $SBuf=explode(':::', $rgBuf);
  13.                         socket_recvfrom($socket, $buf, 12, 0, $from, $port);
  14.                                 if ($SBuf[0]=="command"){
  15.                                
  16.                                 system($SBuf[1]);
  17.                         }else{
  18.         if(is_dir("logfiles/".$SBuf[0])){
  19.                 $fi=fopen("logfiles/".$SBuf[0]."/server.log", "a");
  20.                 fwrite($fi, $SBuf[1]."\n");
  21.                 fclose($fi);
  22.                 $fi2=fopen("logfiles/".$SBuf[0]."/Serverinfo.log", "a");
  23.                 ftruncate($fi2, 0);
  24.                 fwrite($fi2, $SBuf[2]."\n");
  25.                 fclose($fi2);
  26.                 echo $SBuf[0];
  27.                 echo $from;
  28.         }else{
  29.                 mkdir("logfiles/".$SBuf[0], 0700);
  30.                 $fi=fopen("logfiles/".$SBuf[0]."/server.log", "a");
  31.                 fwrite($fi, $SBuf[1]."\n");
  32.                 fclose($fi);
  33.                 $fi2=fopen("logfiles/".$SBuf[0]."/Serverinfo.log", "a");
  34.                 ftruncate($fi2, 0);
  35.                 fwrite($fi2, $SBuf[2]."\n");
  36.                 fclose($fi2);
  37.                 echo $SBuf[0];
  38.                 echo $from;
  39.         }      
  40. }
  41.  
  42.  
  43. }
  44. ?>
  45.  


Вот сообщение об ошибке


PHP Warning: socket_recvfrom(): unable to recvfrom [107]: Transport endpoint is not connected in /var/www/server/start_server.php on line 13

этот скрипт принимает инфу и распределяет чё с ней делать а 2-й отсылает, инфа передается норм, но хочу видеть IP адрес машины с которой пришла инфа
2. EuGen - 02 Апреля, 2012 - 17:14:13 - перейти к сообщению
Нужно сначала принять соединение при помощи socket_accept - примерно так (в терминах Ваших переменных):
PHP:
скопировать код в буфер обмена
  1. socket_bind($socket, $addres, $port);
  2. while($msgsock=socket_accept($socket))
  3. {
  4.     socket_listen($socket, 5);
  5.    //...
  6. }
3. nordghost - 02 Апреля, 2012 - 17:19:40 - перейти к сообщению
Извините я пока новичёк в php не могу понять уда мне его присобачить Не понял
4. EuGen - 02 Апреля, 2012 - 17:25:13 - перейти к сообщению
nordghost
Вместо Вашего while(true){
5. nordghost - 02 Апреля, 2012 - 17:31:59 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $setings=parse_ini_file("settings/senddataconfig.ini");
  4. $port=10001;
  5. $addres='192.168.168.136';
  6.         $socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
  7.  
  8.                 socket_bind($socket, $addres, $port);
  9.                 while($msgsock=socket_accept($socket)){
  10.                         socket_listen($socket, 5);
  11.                         $rgBuf=socket_read($msgsock, 1024);
  12.                         $SBuf=explode(':::', $rgBuf);
  13.                         socket_recvfrom($socket, $buf, 12, 0, $from, $port2);
  14.                                 if ($SBuf[0]=="command"){
  15.                                
  16.                                 system($SBuf[1]);
  17.                         }else{
  18.         if(is_dir("logfiles/".$SBuf[0])){
  19.                 $fi=fopen("logfiles/".$SBuf[0]."/server.log", "a");
  20.                 fwrite($fi, $SBuf[1]."\n");
  21.                 fclose($fi);
  22.                 $fi2=fopen("logfiles/".$SBuf[0]."/Serverinfo.log", "a");
  23.                 ftruncate($fi2, 0);
  24.                 fwrite($fi2, $SBuf[2]."\n");
  25.                 fclose($fi2);
  26.                 echo $SBuf[0];
  27.                 echo $from;
  28.         }else{
  29.                 mkdir("logfiles/".$SBuf[0], 0700);
  30.                 $fi=fopen("logfiles/".$SBuf[0]."/server.log", "a");
  31.                 fwrite($fi, $SBuf[1]."\n");
  32.                 fclose($fi);
  33.                 $fi2=fopen("logfiles/".$SBuf[0]."/Serverinfo.log", "a");
  34.                 ftruncate($fi2, 0);
  35.                 fwrite($fi2, $SBuf[2]."\n");
  36.                 fclose($fi2);
  37.                 echo $SBuf[0];
  38.                 echo $from;
  39.         }      
  40. }
  41.  
  42.  
  43. }
  44. ?>
  45.  


Cделал так теперь не хочет делать ацепт!

 

Powered by ExBB FM 1.0 RC1