Autor Zpráva
Nickname
Profil *
Dobrý deň,

Chcel by som si vytvoriť v php TCP prijímač, ktorý by zachytával všetky requesty.

 
// Server IP address
$address = "IP adresa...";
 
// Port to listen
$port = port...;


    
while(true) {
$mysock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($mysock,$address, $port) or die(socket_strerror(socket_last_error($mysock))); 
socket_listen($mysock, 5);
$client = socket_accept($mysock);


// read 1024 bytes from client
$input = socket_read($client, 1024);
echo $input;
//flush();
 
// write received data to the file
writeToFile('abc.txt', $input);
 
//socket_close($client);
//socket_close($mysock);

}
  function writeToFile($strFilename, $strText) 
{ 
      if($fp = @fopen($strFilename,"a")) 
     { 
          $contents = fwrite($fp, $strText); 
          fclose($fp); 
          return true; 
      }else{ 
          return false; 
      } 
 
  } 

avšak po jednom requeste už requesty ďalej nedostávam.

Ďakujem
Majkl578
Profil
Vytvoření (11. řádek), nabindování (12.) a spuštění poslouchání (13.) bys zřejmě měl mít mimo while.
Nickname
Profil *
Majkl578:
Skúšal som to aj tak, ale naneštastie konekcia sa po prijatí balíčka ihneď preruší :(... mám soft, ktorý TCP balíčky posiela, loguje, a ukazuje stav konekcie... z logov vidím, že balíček mi pošle(konekcia sa otvorí), ale hneď na to, po odoslaní tohto balíčka sa konekcia aj uzavrie, čo je spôsobené nejak mojim PHP :((
Ramses
Profil *
set_time_limit(0);
Na začátek skriptu, měl by si docílit toho, že ta app neskončí, tedy alespon dokud ty neukončíš ten skript násilně.
Nickname
Profil *
Ramses:
set_time_limit(0) by malo význam vtedy, ak by som to púšťal priamo v browseri. Ja to však chcem spúštať cez konzolu.


Nevie mi niekto poradiť ako na to? Kľudne aj úplne iný postup. Proste potrebujem skript bežiaci neustále v konzole ktorý ak príde TCP request spracuje ho a čaká na ďalší

Ďakujem
Ugo
Profil
1. zvolit jiný jazyk než PHP
2. nastavit ten time_limit, jist si nejsem, ale proč by měl dělat rozdíl mezi puštěním v konzoli tebou a puštěním apachem
3. nekonečnou smyčku

jelikož poslední 2 body předpokládám máš, tak bych se zaměřil na bod 1, ale to že nejde udaný kód je mi divný, když uděláš to samé ale místo zachytávání packetů budeš zachytávat změnu souboru tak přepodkládám že vše půjde -> neskončí ti to nějakou chybou? :-/


ještě dodám, že jsem se snažil vytvořit bota jenž by zachytával xmpp komunikaci, jednoduše to selhalo na tom, že jsem zachytil třetinu komunikace, resp. nesměla být moc rychlá, od té doby už nevěřím tomu že je toto v phpku možné udělat tak aby to bylo opravdu použitelné, možná jsem tehdy mohl ale udělat něco lépe.
Ramses
Profil *
Nickname:
Ne to se pleteš, nastavuje to dobu běhu skriptu a je jedno, jestli výstup posíláš do browseru nebo ho máš v konzoli, ta app jednoduše poběží, dokud ji násilně nesejmeš nebo se nevyskytne ve skriptu chyba.

Můj příklad, který jsem na rychlo zpíchnul:

<?php
set_time_limit(0);

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_bind($socket, "0.0.0.0", 11111);
socket_listen($socket);

while(true)
{
    if(($client = socket_accept($socket)) !== false)
    {
        print "New connection\n";        
    }
}

pro příště to nejdříve alespoň vyzkoušej, než se začneš znovu ptát.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: