функция recv для сокета TCP в C ++

conda не поддерживает это напрямую, потому что он устанавливается из двоичных файлов, тогда как git install будет из источника. conda build поддерживает рецепты, созданные из git. С другой стороны, если все, что вы хотите сделать, должно быть в курсе последних и самых больших пакетов, использование pip внутри Anaconda просто отлично или, альтернативно, использовать setup.py develop против клона git.

0
задан Chandrapal Singh Jhala 13 July 2018 в 05:49
поделиться

1 ответ

Прежде всего, ваш код имеет ошибку (что приводит к неопределенному поведению). Вы выделили 1461 байт, но вы пытаетесь прочитать больше:

Он должен выглядеть следующим образом:

vector<char> buf(5000); // you are using C++ not C
int bytes = recv(sock, buf.data(), buf.size(), 0);
std::cout << bytes;

Во-вторых, результат как и ожидалось. Камера отправляет гораздо больше данных, чем 2000 байт, поэтому я не удивлен, что количество прочитанных байтов охватывает весь запрошенный размер.

1
ответ дан Marek R 17 August 2018 в 13:38
поделиться
  • 1
    прежде всего, спасибо вам, сэр за ваш ответ, когда я запишусь в wirehark, я обнаружил, что camear посылает пакеты данных непрерывно, но в кусках между 100-1460 моя функция recv работает, пока (1) цикл – Chandrapal Singh Jhala 13 July 2018 в 06:04
  • 2
    не имеет значения, какие куски отправляются. Система может объединить их. Информация о размере кусков недоступна и не нужна. Никогда не предполагайте, что если одна сторона отправит блок данных в один размер того же размера, будет получен с другой стороны. Все может случиться с кусками между отправителем и получателем, и у вас нет контроля над этим. Их можно объединить и их можно нарезать. – Marek R 13 July 2018 в 06:06
  • 3
    спасибо, сэр, последний вопрос, могу ли я сделать вектор размером 10000 – Chandrapal Singh Jhala 13 July 2018 в 06:18
  • 4
    @ChandrapalSinghJhala да, вы можете, std :: vector или "new & quot; оператор использует «кучу». области вашей программы, так как пока у вас есть память на вашем компьютере, вам не нужно беспокоиться об этом. Кроме того, если у вас недостаточно памяти, «новый» или "std :: vector" будет выдавать исключение. 10 Кбайт - это небольшое пространство памяти, поэтому все будет в порядке. – Aminos 13 July 2018 в 07:18
Другие вопросы по тегам:

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