2010-04-22 3 views
1

Я пытаюсь отправить массив int через Winsocks. Возможно, я ошибаюсь, но я уверен, что поддерживается только char *, поэтому я как бы зациклен на том, как это сделать правильно. Есть также проблемы с маленьким/большим edian, так что было бы хорошим способом сделать это? Я уже задал вопрос о converting int array to char, но вместо этого было рекомендовано начать новый поток в этом разделе сети.Отправка массива int через Winsocks

ответ

2

Вы не понимаете, что вы можете отправить с помощью WinSock. Да send() определяется как прием буфера char *, но на самом деле он просто берет буфер данных. Если send() были определены сегодня, buf будет определяться как void *. Но я считаю, что void * не был частью стандарта C при отправке().

Резюме этого метода send() не учитывает, какой указатель вы передаете ему, он просто берет необработанные байты, на которые указывает указатель, и заносит их в пакет. Он никогда не смотрит на них. Так что нет ничего плохого просто передавая массив:

int sendArray(SOCKET sock, int array[], int arrayLen) { 
    // You need to send the array length so the receiver knows 
    // how long the array is 
    int bytesSent = send(sock, (char*)&arrayLen, sizeof(arrayLen)); 

    if (bytesSent != SOCKET_ERROR) { 
     // If that worked, send the 
     bytesSent = send(sock, (char*)array, sizeof(array[0]) * arrayLen); 
    } 

    return bytesSent; 
} 

Тогда вам придется написать цикл на посыле, который получает длину массива, выделяет массив такого размера и петлю на RECV() пока он собирает массив.

Пока оба клиента и сервера имеют одинаковую консистенцию, вам не нужно выполнять дополнительную обработку, так как обе машины имеют одинаковый формат данных. Поскольку у вас вопрос с тегами Windows, я предполагаю, что это так.

+0

О, ладно, у меня было недоразумение. Я попробую! – seed