Funkcija socket_set_blocking() (alias za
stream_set_blocking()) določa, ali bo operacija na vtičnici (kot je branje ali pisanje) ustavila izvajanje
skripte, dokler ni končana, ali pa se bo takoj vrnila.
<?php
$host = "127.0.0.1";
$port = 8080;
// Ustvari TCP/IP vtičnico
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("Ne morem ustvariti vtičnice: " . socket_strerror(socket_last_error()));
}
// Poveži vtičnico na localhost:8080
if (socket_bind($socket, $host, $port) === false) {
die("Ne morem se povezati na vtičnico: " . socket_strerror(socket_last_error($socket)));
}
// Začni poslušati na vtičnici
if (socket_listen($socket, 5) === false) {
die("Ne morem poslušati na vtičnici: " . socket_strerror(socket_last_error($socket)));
}
echo "Strežnik posluša na $host:$port\n";
do {
$client = socket_accept($socket);
if ($client !== false) {
$message = "Dobrodošli v moji PHP vadnici!\n";
socket_write($client, $message, strlen($message));
socket_close($client);
}
} while (true);
socket_close($socket);
?>
<?php
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket === false) {
die("Ne morem ustvariti vtičnice: " . socket_strerror(socket_last_error()));
}
// Poveži s strežnikom
$result = socket_connect($socket, "127.0.0.1", 8080);
if ($result === false) {
die("Ne morem se povezati: " . socket_strerror(socket_last_error($socket)));
}
$input = "";
while ($out = socket_read($socket, 2048)) {
$input .= $out;
}
if ($input) {
echo "Prejeti podatki: $input\n";
} else {
echo "Ni bilo prejetih podatkov.\n";
}
// Zapri vtičnico
socket_close($socket);
?>
Najprej zaženimo server.php skripto v terminalu
(Windows v CMD). Strežnik bo poslušal na 127.0.0.1:8080. Nato zaženimo client.php skripto v drugem
terminalu ali brskalniku. Odjemalec se bo poskušal povezati na ta strežnik. V CMD ali terminalu se moramo najprej
premakniti v mapo z datoteko (ukaz cd ime_mape). Ko smo v pravi mapi, zaženemo PHP strežnik z
ukazom:
php server.php
Če terminal javi napako, da ukaz 'php' ni prepoznan, pomeni, da PHP ni v sistemski poti (PATH). Napaka izgleda takole:
php : The term 'php' is not recognized...
V tem primeru morate terminalu natančno povedati,
kje se nahaja program php.exe in katero datoteko naj zažene. Če imate datoteke v
mapi C:\imeProjekta\ in XAMPP v mapi C:\xampp\, ukaz v terminalu
sestavite takole:
C:\imeProjekta\ C:\xampp\php\php.exe server.php
Po pritisku na tipko Enter se izpiše:
Strežnik posluša na 127.0.0.1:8080
Ko se to izpiše, v drugem oknu terminala na enak način zaženemo še
client.php:
Prejeti podatki: Dobrodošli v moji PHP vadnici!
socket_create().socket_connect().socket_set_blocking($socket, false).socket_write().socket_read() (v neblokiranem načinu se funkcija takoj zaključi).Opombe:
Uporaba neblokiranega načina je koristna pri gradnji aplikacij, ki temeljijo na dogodkih, kjer ne želimo, da ena operacija ustavi celotno aplikacijo.
Če uporabljate Linux in imate nameščen XAMPP (LAMPP), je pot do PHP-ja drugačna. Odprite terminal in se premaknite v mapo s projektom, nato uporabite naslednji ukaz:
/opt/lampp/bin/php server.php
V Linux-u terminal običajno že ve, kje je PHP, če ste ga dodali v poti,
zato pogosto zadostuje že samo php server.php. Ne pozabite na pravice za izvajanje, če bi zaganjali
skripto neposredno.
Hvala za obisk! Dodajam politiko zasebnosti.
© 2024 Vse pravice pridržane.
Vam je koda pomagala? Če želite podpreti moj trud pri pripravi vodičev in vzdrževanju strani, mi lahko namenite donacijo za kavo.