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

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
от 300 000 до 500 000 ₽
06 мая 2024, в 09:38
1200 руб./в час
06 мая 2024, в 09:37
1200 руб./в час
06 мая 2024, в 09:36
8000 руб./за проект