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, не читая предыдущие ответы (длина ответов неизвестна, сервер соединение не закрывает)?
  • Вопрос задан
  • 2719 просмотров
Пригласить эксперта
Ответы на вопрос 1
begemot_sun
@begemot_sun
Программист в душе.
Очевидно что никак. Сокет - это такой поток байт. Вы записали в него N байт с одной стороны и должны прочитать N байт с другой стороны. Сокет не разбирает и не знает о внутренней струтуре сообщений ничего.
Сегодня вы послали ему 1 байт .. .а завтра пошлете 10000, как по вашему сокет должен интерпретировать это ? никак !!! . Он просто транспорт между двумя приложениями. Подробнее читайте модель OSI.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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