Задать вопрос
dostelon
@dostelon

Как очистить сокет при чтении?

Если делать много последовательных записей в сокет (tcp), то ответы сервера накапливаются в очереди в сокете. И затем, когда читаем из сокета, то получаем самый первый ответ сервера.
Как получать ответ на последнюю запись в сокет?

$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, $ip, $port);

socket_write ($sock, $send1); //Сервер должен ответить: A
socket_write ($sock, $send2); //Сервер должен ответить: B
socket_write ($sock, $send3); //Сервер должен ответить: C
socket_write ($sock, $send4); //Сервер должен ответить: D

socket_read($sock, 1); // Получаем A, а надо - D

Как в socket_read получить D, не читая предыдущие ответы (длина ответов неизвестна, сервер соединение не закрывает)?
  • Вопрос задан
  • 2745 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillfactory
    Профессия Fullstack веб-разработчик на JavaScript и PHP
    20 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Skillbox
    PHP-разработчик. Базовый уровень
    3 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 1
begemot_sun
@begemot_sun
Программист в душе.
Очевидно что никак. Сокет - это такой поток байт. Вы записали в него N байт с одной стороны и должны прочитать N байт с другой стороны. Сокет не разбирает и не знает о внутренней струтуре сообщений ничего.
Сегодня вы послали ему 1 байт .. .а завтра пошлете 10000, как по вашему сокет должен интерпретировать это ? никак !!! . Он просто транспорт между двумя приложениями. Подробнее читайте модель OSI.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы