Я работаю над небольшим клиентским приложением на чистом C (мое первое:/), которое использует сокет TCP для связи с сервером. Сервер отправляет мне пакет (структура C), в котором первый байт содержит размер пакета.
Проблема в том, что сервер использует беззнаковый символ для представления размера пакета, потому что символ имеет знак (от -128 до +127), а +127 недостаточно для представления размера, который может достигать 255 в некоторых пакетах. => Мне нужен беззнаковый буфер символов;
В Linux вторым параметром функции recv() является void *, что означает, что я могу объявить буфер void *, и проблем не будет. Но recv() в Windows (MinGW) имеет char * вместо void *. Что дает мне предупреждение «Несоответствие типа параметра: несовместимые типы указателей« char * »и« unsigned char * »»
Можно ли решить эту проблему? Вот код. Спасибо.
PS: я использую НЕБЛОКИРУЕМЫЕ сокеты.
int recvsize = 0;
unsigned char tmpsize;
int index = 0;
unsigned char *buffer;
while (1) {
recvsize = recv(server, &tmpsize, sizeof(unsigned char), 0); // every packet starts with one byte where is its length
if (recvsize > 0 ) {
buffer = malloc(tmpsize * sizeof(unsigned char)); //memory allocation according to the size of packet
buffer[0] = tmpsize--; //get back the size value to the buffer
recvsize = 0;
do { //loop over and over until you do not have all bytes of the packet
recvsize = recv(server, &buffer[++index], tmpsize, 0);
if (recvsize == 0)
break;
tmpsize -=recvsize;
index += recvsize;
} while (tmpsize != 0);
}
sleep(50);
}
charможет быть подписано на вашей платформе. Стандарт оставляет это на усмотрение реализации. В общем, при передаче данных между разными системами (и в большинстве случаев также в одной системе) предпочтительным способом является использование типовstdint.hи надлежащая сериализация. В противном случае ждет брезент. - person too honest for this site   schedule 04.09.2015sizeof(unsigned char)всегда равно 1, поэтому... * sizeof(unsigned char)не требуется. Если код хочет отметить масштабирование по размеру переменной, предложитеbuffer = malloc(tmpsize * sizeof *buffer)- person chux - Reinstate Monica   schedule 04.09.2015