Я пытаюсь отправить массивы по сети с помощью winsock2. Я читал, что Microsoft отключила отправку необработанных указателей, но вы все равно можете отправлять неотредактированные двоичные данные, приведя указатель к char*:
send(rsock, (char*)&counter, len, 0);
Однако проблема заключается в том, чтобы поместить данные обратно в массив, когда они достигают клиента. здесь pass — это двоичные данные. Вот как я делаю целые, логические и двойные числа.
recv(sock, pass, sizeof(int), 0);
refresh = (int((void*)&pass));
recv(sock, pass, sizeof(bool[4800][254]), 0);
**key = (bool)&pass;
recv(sock, pass, sizeof(double[4800][254]), 0);
**mil = (double)&pass;
Целые числа не являются массивами, а bool и double хранятся в двумерных массивах. Теперь компилятор говорит, что этот код работает для int и bool, но для двойных он говорит: «'приведение типа': невозможно преобразовать из 'char **' в 'двойное'», «недопустимое преобразование типа», хотя я пытаюсь поместить необработанный данные в нем. Я сделал что-то не так? Есть ли другой обходной путь для отправки массивов? Заранее спасибо.
РЕДАКТИРОВАТЬ: кроме того, я до сих пор не пробовал код с другим ПК, поэтому я очень сомневаюсь, что преобразование для целых и логических значений выполнено правильно.
recv()
: вы предполагаете, что он заполняет буфер. Это не предусмотрено контрактом. Вам нужно сохранить результатrecv()
в переменную и проверить его на -1, проверить на 0 и в противном случае использовать его как количество полученных байтов; если этого достаточно для следующего фрагмента кода, ОК, иначе цикл. - person user207421   schedule 07.08.2014