@fastboot
while (true)
{
echo 'Accept socket ... ';
if (($msgsock = socket_accept($sock)) < 0)
{
throw new Exception('socket_accept() failed: '.socket_strerror(socket_last_error())."n");
}
else
{
echo "OKn";
}
echo "Say to client ($message) ... ";
socket_write($msgsock, $message, strlen($message));
echo "OKn";
while ( $buf = socket_read($msgsock, 1024) )
{
#echo 'Client said: ';
if (false === $buf )
{
throw new Exception('socket_read() failed: '.socket_strerror(socket_last_error())."n");
}
else
{
$message = $buf;
echo $buf;
}
}
}
Клиент на машине
function socket_echo ( $MESSAGE )
{
#GLOBAL $SOCKET;
$address="127.0.0.1"; //Адрес работы сервера
$port = 12345; //Порт работы сервера (лучше какой-нибудь редкоиспользуемый)
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$result = socket_connect($socket, $address, $port);
socket_write($socket, $MESSAGE, strlen($MESSAGE));
socket_shutdown($socket, STREAM_SHUT_WR);
}
ВОПРОС:
1) хочу понять или как правильно прослушивать соединения — он подключился что бы слушать ответ сервера? или он подключился и ждёт когда я ему отвечу?
2) как правильно закрывать соединение с сокетом? (на стороне клиента)
Решения вопроса 0
Ответы на вопрос 1
@Vamp
Например, в http протоколе сервер изначально работает в режиме прослушивания. То есть сразу после подключения к серверу клиент обязан первый отправить данные (запрос). После отправки запроса сервер с клиентом как бы меняются ролями — клиент переходит в режим прослушивания и ждёт данных от сервера (ответ), а сервер отправляет ответ по мере готовности. После отправки ответа опять идёт смена ролей. И так продолжается пока одна из сторон не закроет сокет.
2. Сокет закрывается функцией socket_close. На стороне сервера это делается той же функцией.