частности с recv
- Как мне получить весь ответ полностью?
Что я делаю - посылаю запрос на авторизацию на сервер ftp по 21 порту, я должен получить ответы:
220 Microsoft FTP Service
331 Anonymous access allowed, send identity (e-mail name) as password.
230 Anonymous user logged in.
Последняя и предпоследняя строка может варироваться... елсли я не ставлю Sleep хотябы в 500 шлет только первую строку и все.
Мне тут советовали собирать по частям, ок закидываю в цикл, принимает все байты, тоесть все строки и зависает recv... Ok! Просим помощи у ioctlsocket(brute, FIONBIO, &iMode_1); (Неблокирующий сокет) вырывает снова первую строку и кидает всегда -1... Как быть, кто может нормально подсказать, я не прошу мне делать что-то, просто дайте ответ развернутый или статью, где описана такая же проблема...
Это не проблема. и не ошибка, это - фича. У тебя есть два варианта работы: блокирующий и НЕблокирующий. если удобно работать с первым, но не хочешь блокировки главного потока, то используешь второй поток. если вариант два (НеБлокирующий) ты должен организовать некий цикл опроса. либо попросить помощи ОСи чтобы она тебе сказала чувак есть данные получите распишитесь... в Linux это epool. в винде ХЗ. Если кроссплатформенно без гемо...я то можно на Qt. там тебе скажут когда данные есть...
Да никак же. Это определяется твоим протоколом обмена . В каких -то протоколах заранее посылают длинну, в каких-то есть STOP WORD и так далее. Универсальных решений на уровне TCP нет. TCP -- это как это там канальный протокол, тебе нужен более высокий, уровня приложения (на базе TCP), он ТВОЙ СОБСТТВЕННЫЙ. и кроме тебя самого никто не знает как там размер "пакета" фиксировать.
Если это FTP -- читай именно про FTP, как там коней передачи файла фиксируется, либо используй более высокоуровневые библиотеки, что работают именно с FTP (licurl, CPR -- как пример)
Обсуждают сегодня