Foros del Web » Programando para Internet » PHP »

problemas con socket

Estas en el tema de problemas con socket en el foro de PHP en Foros del Web. buenas!!!!!!!! Esto aprendiendo a trabajar con socket, pero no me funciona, eh leido varios tutoriales, pero no hay caso, no me puedo conectar, alguien me ...
  #1 (permalink)  
Antiguo 23/01/2012, 15:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 5 meses
Puntos: 20
problemas con socket

buenas!!!!!!!!

Esto aprendiendo a trabajar con socket, pero no me funciona, eh leido varios tutoriales, pero no hay caso, no me puedo conectar, alguien me puede ayudar??? desde ya muchas gracias.1!!!
  #2 (permalink)  
Antiguo 23/01/2012, 16:05
 
Fecha de Ingreso: enero-2012
Ubicación: localhost
Mensajes: 37
Antigüedad: 12 años, 3 meses
Puntos: 10
Respuesta: problemas con socket

Primeramente a donde quieres conectarte que metodo estas usado etc.

Saludos xD
__________________
"El Conocimiento Es Poder
Mente Comunal - Diversidad Colectiva
  #3 (permalink)  
Antiguo 23/01/2012, 16:22
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: problemas con socket

Te diría en que parte te equivocas, pero sin ver el código sería adivinar.

Saludos
__________________
Grupo Telegram Docker en Español
  #4 (permalink)  
Antiguo 24/01/2012, 06:03
 
Fecha de Ingreso: diciembre-2008
Mensajes: 805
Antigüedad: 15 años, 5 meses
Puntos: 20
Respuesta: problemas con socket

Buenas!!! me quiero conectar a un router. este es el codigo.
Código PHP:
<?php
require('clases/routeros.php');
$API = new routeros_api();
$API->debug true;
if (
$API->connect('192.253.1.1''sergio''123456')) {
$API->write('/interface/getall');
   
$ARRAY $API->read();
   
print_r($ARRAY);
   
$API->disconnect();
}
?>
y esta es la clase:
Código PHP:
<?php
class routeros_api
{
    var 
$debug false;      // Show debug information
    
var $error_no;           // Variable for storing connection error number, if any
    
var $error_str;          // Variable for storing connection error text, if any
    
var $attempts 5;       // Connection attempt count
    
var $connected false;  // Connection state
    
var $delay 3;          // Delay between connection attempts in seconds
    
var $port 8728;        // Port to connect to
    
var $timeout 3;        // Connection attempt timeout and data read timeout
    
var $socket;             // Variable for storing socket resource

    
function debug($text)
    {
        if (
$this->debug)
            echo 
$text "\n";
    }

    function 
encode_length($length)
    {
        if (
$length 0x80) {
            
$length chr($length);
        } else if (
$length 0x4000) {
            
$length |= 0x8000;
            
$length chr(($length >> 8) & 0xFF) . chr($length 0xFF);
        } else if (
$length 0x200000) {
            
$length |= 0xC00000;
            
$length chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length 0xFF);
        } else if (
$length 0x10000000) {
            
$length |= 0xE0000000;
            
$length chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length 0xFF);
        } else if (
$length >= 0x10000000)
            
$length chr(0xF0) . chr(($length >> 24) & 0xFF) . chr(($length >> 16) & 0xFF) . chr(($length >> 8) & 0xFF) . chr($length 0xFF);
        return 
$length;
    }
    function 
connect($ip$login$password)
    {

        for (
$ATTEMPT 1$ATTEMPT <= $this->attempts$ATTEMPT++) {
            
$this->connected false;
            
$this->debug('Connection attempt #' $ATTEMPT ' to ' $ip ':' $this->port '...');

            if (
$this->socket = @fsockopen($ip$this->port$this->error_no$this->error_str$this->timeout)) {

                
socket_set_timeout($this->socket$this->timeout);
                
$this->write('/login');
                
$RESPONSE $this->read(false);
                if (
$RESPONSE[0] == '!done') {
                    if (
preg_match_all('/[^=]+/i'$RESPONSE[1], $MATCHES)) {
                        if (
$MATCHES[0][0] == 'ret' && strlen($MATCHES[0][1]) == 32) {
                            
$this->write('/login'false);
                            
$this->write('=name=' $loginfalse);
                            
$this->write('=response=00' md5(chr(0) . $password pack('H*'$MATCHES[0][1])));
                            
$RESPONSE $this->read(false);
                            if (
$RESPONSE[0] == '!done') {
                                
$this->connected true;
                                break;
                            }
                        }
                    }
                }
                
fclose($this->socket);
            }
            
sleep($this->delay);
        }
        if (
$this->connected)
            
$this->debug('Connected...');
        else
            
$this->debug('Error...');
        return 
$this->connected;
    }

    function 
parse_response($response)
    {
        if (
is_array($response)) {
            
$PARSED      = array();
            
$CURRENT     null;
            
$singlevalue null;
            
$count       0;
            foreach (
$response as $x) {
                if (
in_array($x, array(
                    
'!fatal',
                    
'!re',
                    
'!trap'
                
))) {
                    if (
$x == '!re') {
                        
$CURRENT =& $PARSED[];
                    } else
                        
$CURRENT =& $PARSED[$x][];
                } else if (
$x != '!done') {
                    if (
preg_match_all('/[^=]+/i'$x$MATCHES)) {
                        if (
$MATCHES[0][0] == 'ret') {
                            
$singlevalue $MATCHES[0][1];
                        }
                        
$CURRENT[$MATCHES[0][0]] = (isset($MATCHES[0][1]) ? $MATCHES[0][1] : '');
                    }
                }
            }
            if (empty(
$PARSED) && !is_null($singlevalue)) {
                
$PARSED $singlevalue;
            }
            return 
$PARSED;
        } else
            return array();
    }

   

    
/**
     * Read data from Router OS
     *
     * @param boolean     $parse      Parse the data? default: true
     *
     * @return array                  Array with parsed or unparsed data
     */
    
function read($parse true)
    {
        
$RESPONSE = array();
        while (
true) {
            
// Read the first byte of input which gives us some or all of the length
            // of the remaining reply.
            
$BYTE   ord(fread($this->socket1));
            
$LENGTH 0;
            
// If the first bit is set then we need to remove the first four bits, shift left 8
            // and then read another byte in.
            // We repeat this for the second and third bits.
            // If the fourth bit is set, we need to remove anything left in the first byte
            // and then read in yet another byte.
            
if ($BYTE 128) {
                if ((
$BYTE 192) == 128) {
                    
$LENGTH = (($BYTE 63) << 8) + ord(fread($this->socket1));
                } else {
                    if ((
$BYTE 224) == 192) {
                        
$LENGTH = (($BYTE 31) << 8) + ord(fread($this->socket1));
                        
$LENGTH = ($LENGTH << 8) + ord(fread($this->socket1));
                    } else {
                        if ((
$BYTE 240) == 224) {
                            
$LENGTH = (($BYTE 15) << 8) + ord(fread($this->socket1));
                            
$LENGTH = ($LENGTH << 8) + ord(fread($this->socket1));
                            
$LENGTH = ($LENGTH << 8) + ord(fread($this->socket1));
                        } else {
                            
$LENGTH ord(fread($this->socket1));
                            
$LENGTH = ($LENGTH << 8) + ord(fread($this->socket1));
                            
$LENGTH = ($LENGTH << 8) + ord(fread($this->socket1));
                            
$LENGTH = ($LENGTH << 8) + ord(fread($this->socket1));
                        }
                    }
                }
            } else {
                
$LENGTH $BYTE;
            }
            
// If we have got more characters to read, read them in.
            
if ($LENGTH 0) {
                
$_      "";
                
$retlen 0;
                while (
$retlen $LENGTH) {
                    
$toread $LENGTH $retlen;
                    
$_ .= fread($this->socket$toread);
                    
$retlen strlen($_);
                }
                
$RESPONSE[] = $_;
                
$this->debug('>>> [' $retlen '/' $LENGTH '] bytes read.');
            }
            
// If we get a !done, make a note of it.
            
if ($_ == "!done")
                
$receiveddone true;
            
$STATUS socket_get_status($this->socket);
            if (
$LENGTH 0)
                
$this->debug('>>> [' $LENGTH ', ' $STATUS['unread_bytes'] . ']' $_);
            if ((!
$this->connected && !$STATUS['unread_bytes']) || ($this->connected && !$STATUS['unread_bytes'] && $receiveddone))
                break;
        }
        if (
$parse)
            
$RESPONSE $this->parse_response($RESPONSE);
        return 
$RESPONSE;
    }


    
/**
     * Write (send) data to Router OS
     *
     * @param string      $command    A string with the command to send
     * @param mixed       $param2     If we set an integer, the command will send this data as a "tag"
     *                                If we set it to boolean true, the funcion will send the comand and finish
     *                                If we set it to boolean false, the funcion will send the comand and wait for next command
     *                                Default: true
     *
     * @return boolean                Return false if no command especified
     */
    
function write($command$param2 true)
    {
        if (
$command) {
            
$data explode("\n"$command);
            foreach (
$data as $com) {
                
$com trim($com);
                
fwrite($this->socket$this->encode_length(strlen($com)) . $com);
                
$this->debug('<<< [' strlen($com) . '] ' $com);
            }
            if (
gettype($param2) == 'integer') {
                
fwrite($this->socket$this->encode_length(strlen('.tag=' $param2)) . '.tag=' $param2 chr(0));
                
$this->debug('<<< [' strlen('.tag=' $param2) . '] .tag=' $param2);
            } else if (
gettype($param2) == 'boolean')
                
fwrite($this->socket, ($param2 chr(0) : ''));
            return 
true;
        } else
            return 
false;
    }
Muchas Gracias por la ayuda!!!!!

Etiquetas: socket
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:50.