Я хочу иметь возможность отправлять или получать произвольный объем данных через сокет с помощью вызовов send () и recv ().Чтобы учесть это, я создал цикл while, который не завершается до тех пор, пока вызовы send () или recv () не вернут 0 байтов [при условии отсутствия ошибки -1].Для учета ранее отправленных или полученных данных:
- отслеживайте количество возвращаемых байтов
- непрерывно вызывайте send () / recv (), пока функции не вернут 0
- обновить указатели, указывающие на данные, чтобы они ссылались только на те записи данных, которые еще не были обработаны send () / recv ().[использовать арифметику указателя]
Код, который следует ниже, является псевдо-кодом, написанным в 'C'
ОТПРАВИТЬ ЦИКЛ:
/* bunch of socket code above */
ssize_t condition;
do
{
ssize_t return_bytes = send(fd_socket, data, DATACHUNK, 0);
if (return_bytes == -1)
{
perror("Problems sending...");
exit(EXIT_FAILURE);
}
condition = return_bytes;
data = data + return_bytes;
} while (condition > 0);
ПОЛУЧИТЬ ЦИКЛ:
/* bunch of socket code above */
ssize_t = condition;
ssize_t = total = 0;
memset(data_buffer, 0, BUFFSIZE);
do
{
ssize_t return_bytes = recv(fd_socket, data_buffer, BUFFSIZE - 1, 0);
if
{
perror("Problems receiving...");
exit(EXIT_FAILURE);
}
condition = return_bytes;
data_buffer = data_buffer + return_bytes;
total = total + return_bytes;
} while (condition > 0);
data_buffer[total] = '\0';
К сожалению, при попытке обновить буфер данных char array [] я получаю сообщение об ошибке: «array not assignable».Я думал, что массивы распадаются на указатель, который указывает на начало блока данных в памяти (индекс 0).Как я могу обновить указатель, который указывает на мой массив символов, чтобы я мог отправить сообщение произвольного размера?Будет ли иметь значение, если я объявлю буферы символьных данных как:
char * data[DATASIZE]
вместо char data[DATASIZE]
?