This code could be very helpfull...
The following code is for the "server". It listen for a message until CTRL-C
<?php
while (true)
{
// disconnected every 5 seconds...
receive_message('127.0.0.1','85',5);
}
function receive_message($ipServer,$portNumber,$nbSecondsIdle)
{
// creating the socket...
$socket = stream_socket_server('tcp://'.$ipServer.':'.$portNumber, $errno, $errstr);
if (!$socket)
{
echo "$errstr ($errno)<br />\n";
}
else
{
// while there is connection, i'll receive it... if I didn't receive a message within $nbSecondsIdle seconds, the following function will stop.
while ($conn = @stream_socket_accept($socket,$nbSecondsIdle))
{
$message= fread($conn, 1024);
echo 'I have received that : '.$message;
fputs ($conn, "OK\n");
fclose ($conn);
}
fclose($socket);
}
}
?>
The following code is for the "client". It send a message, and read the respons...
<?php
send_message('127.0.0.1','85','Message to send...');
function send_message($ipServer,$portServer,$message)
{
$fp = stream_socket_client("tcp://$ipServer:$portServer", $errno, $errstr);
if (!$fp)
{
echo "ERREUR : $errno - $errstr<br />\n";
}
else
{
fwrite($fp,"$message\n");
$response = fread($fp, 4);
if ($response != "OK\n")
{echo 'The command couldn\'t be executed...\ncause :'.$response;}
else
{echo 'Execution successfull...';}
fclose($fp);
}
}
?>stream_socket_accept
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
stream_socket_accept
Референца за `function.stream-socket-accept.php` со подобрена типографија и навигација.
stream_socket_accept
класата mysqli_driver
stream_socket_accept — (PHP 5, PHP 7, PHP 8) stream_socket_server()
= NULL
$socket, ?float $timeout = null, string &$peer_name = null): resource|falseПрифати врска на сокет создаден од stream_socket_server().
Параметри
socket-
Прифати врска на сокет претходно создаден од
timeout-
Серверскиот сокет од кој треба да се прифати врска. default_socket_timeout се користи.
peer_name-
Надвор од стандардното време за прифаќање на сокет. Времето треба да биде дадено во секунди. Стандардно,
Забелешка:
Ќе биде поставено на името (адреса) на клиентот кој се поврзал, ако е вклучено и достапно од избраниот транспорт. stream_socket_get_name().
Вратени вредности
Може да се одреди и подоцна користејќи false при неуспех.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
timeout сега е null.
|
Белешки
Враќа поток до прифатената врска на сокетот или stream_socket_recvfrom() and stream_socket_sendto().
Види Исто така
- stream_socket_server() за список на вградени транспортери.
- stream_socket_get_name() Оваа функција не треба да се користи со UDP серверски сокети. Наместо тоа, користете
- stream_set_blocking() - Отворете постојана интернет или Unix доменска врска со сокет
- stream_set_timeout() - Проверува дали датотеката постои и може да се чита
- fgets() - Затвора отворена датотека
- fgetss() - Поставете блокирачки/неблокирачки режим на стрим
- fwrite() - Бинарно читање од датотека
- fclose() Пример #2 Користење на UDP серверски приклучници
- feof() - Добива линија од покажувач на датотека и ги отстранува HTML таговите
- - Иницијализирај cURL заедничка рачка
Белешки од корисници 2 забелешки
To check if there's a new connection waiting, without blocking, or (when using non-blocking mode) without notices), you can use stream_accept (as opposed to socket_select).
<?php
class GenericClass {
protected $resSocket=null;
function acceptConnections() {
# check that we still have a resource
if(is_resource($this->resSocket)) {
$arrRead=array($this->resSocket);
$arrWrite=array();
/** @warning Passing $arrRead,$arrWrite by reference */
if(stream_select($arrRead,$arrWrite,$arrWrite,0)) {
$resConnection=stream_socket_accept($this->resSocket,0);
# ... other stuff here
}
}
}
}
?>