Hey,

Ik ben op dit moment bezig met een script dat inlogt op de MSN server, nu is het authencieren gelukt en moet ik synchroniseren.
Ik stuur dit command naar de server:
SYN {ID} 0 0\r\n (ID wordt vervangen door een opvolgend nummer)
en krijg dit terug:
SBS 0 null

Nu weet ik dat die 1 line is van een hele zooi lines, ik heb al in andere scripts gekeken en deze doen het op de volgende manier:
<?php
while(!feof($this->socket))
{

echo fgets($this->socket);

}
?>

Wanneer ik dit doe blijft hij alleen eeuwig laden, met een for() ophalen lukt wel maar omdat het een variabel aantal lines is is dat niet handig.

Kan iemand me helpen

Mvg,
Ruben
Deze while-loop loopt door tot de socket gesloten wordt, en dat kan best een tijdje duren. Je zult dus een conditie moeten bedenken aan de hand waarvan je uit de loop springt. Stel dat je moet stoppen zodra je een regel tegenkomt die met SBS begint, dan krijg je ongeveer iets als dit:

while(!feof($this->socket))
{
   $data = fgets($this->socket);
   echo $data;

   // Doe iets met data

   if (preg_match("/^SBS/", $data))
   {
      echo "Doei!";
      break;
   }
}
<?php
public function get_syn()
{

echo nl2br(fread($this->socket, 1024));

$einde = FALSE;

while(!feof($this->socket))
{

if($einde == TRUE)
break;

$data = fgets($this->socket);

switch(substr($data, 0, 3))
{

case 'SYN':
case 'GTC':
case 'BLP':
case 'PRP':
case 'LST':
echo $data.'<br />';
break;
default:
$einde = TRUE;
break;

}

}
?>

Ik heb nu deze, hij werkt wel maar hij laadt veel langzamer dan met een for(), enig idee waarom dat is?

Snelheid zou niet zoveel uit moeten maken. Wat me wel opvalt, is dat je eerst een fread doet en vervolgens de data niet opslaat. Dat lijkt me niet handig. Wat nu als je SYN daar al in zit?

Reageren