2012-10-21 4 views
8

Mit folgendem Code, kann ich 1 Anfrage empfangen und schreiben:PHP Socket Listening Schleife

function listen() 
{ 
    // Set time limit to indefinite execution 
    set_time_limit (0); 

    // Set the ip and port we will listen on 
    $address = 'XX.XX.XX.XXX'; 
    $port = XXXX; 

    // Create a TCP Stream socket 
    $sock = socket_create(AF_INET, SOCK_STREAM, 0); 

    // Bind the socket to an address/port 
    $bind = socket_bind($sock, $address, $port); 

    // Start listening for connections 
    socket_listen($sock); 

    /* Accept incoming requests and handle them as child processes */ 
    $client = socket_accept($sock); 

    // Read the input from the client – 1024 bytes 
    $input = socket_read($client, 2024); 

    // Strip all white spaces from input 
    echo $input; 

    // Close the master sockets 
    $close = socket_close($sock); 

    var_dump($close); 
} 

listen(); 

Aber es schließt sich automatisch hören, sobald es 1 Paket empfangen. Ich muss weiterhin Pakete empfangen, bis ein Beenden oder ein Schließbefehl empfangen wird.

Wie soll ich den obigen Code ändern, um diese Funktion zu einer Schleife zu machen?

Antwort

7
set_time_limit (0); 

$address = '46.49.41.188'; 

$port = 7777; 
$con = 1; 
$word = ""; 

$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
$bind = socket_bind($sock, $address, $port); 

socket_listen($sock); 

while ($con == 1) 
{ 
    $client = socket_accept($sock); 
    $input = socket_read($client, 2024); 

    if ($input == 'exit') 
    { 
     $close = socket_close($sock); 
     $con = 0; 
    } 

    if($con == 1) 
    { 
     $word .= $input; 
    } 
} 

echo $word; 

Wenn Anfrage beendet zuhören geschlossen wird. Diese Methode wurde getestet :) und es funktioniert.

+0

Wenn ich Daten über diesen Port sende, bekomme ich ein Zeichen, dann hört alles auf zu drucken. Ich denke, das war das Problem des ursprünglichen Posters. – adrianTNT

1

Wie wäre:

function listen(){ 
// Set the ip and port we will listen on 
$address = 'XX.XX.XX.XXX'; 
$port = XXXX; 
// Create a TCP Stream socket 
$sock = socket_create(AF_INET, SOCK_STREAM, 0); 
// Bind the socket to an address/port 
$bind = socket_bind($sock, $address, $port); 
// Start listening for connections 
socket_listen($sock); 
/* Accept incoming requests and handle them as child processes */ 
$client = socket_accept($sock); 
// Read the input from the client – 1024 bytes 
$input = socket_read($client, 2024); 
// Strip all white spaces from input 
echo $input; 
// Close the master sockets 
$close = socket_close($sock); 
var_dump($close); 
listen(); 
} 
set_time_limit (0); 
listen(); 
+0

zuerst danke für die Antwort:) ... Ich werde dieses Beispiel versuchen, aber das Problem ist: socket_close kann Socket nicht schnell schließen. Ich habe ein Beispiel, wie ich meinen Code in Schleife mache. Ich werde diesen Code schreiben. – Dest