Отправка массива int через Winsocks - PullRequest
1 голос
/ 22 апреля 2010

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

1 Ответ

3 голосов
/ 23 апреля 2010

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

Сводка об этом - 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, я полагаю, что это так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...