Как получить доступ к массиву на стороне сервера сокета tcp / ip - PullRequest
0 голосов
/ 23 июня 2018

Я новичок в сокете TCP с C ++.Я пытаюсь отправить массив int через сокет.Я пишу свой собственный клиент и сокет (оба работают на winOS).Чтобы я мог получить тип массива int, я установил recvbuffer как тип int [] и принудительно изменил его на char внутри функции recv ().Это часть кода сервера:

int recvbuf[6];

и

iResult = recv(ClientSocket, (char *)&recvbuf, recvbuflen, 0);

Результат хороший, я могу распечатать все шесть чисел, что означает, что мой клиент работает хорошо.ОДНАКО, когда я переключаю сервер на другой сервер, который был встроен в SDK и работает под Linux, я больше не могу получить доступ к этим номерам.

Для SDK, мой ввод-вывод выглядит следующим образом:

typedef BYTE char
unsigned int getData(BYTE * data, unsigned int len)
{
    if (_dataFlag == 1)
    {
        if (len <= DATA_LENGTH)
        {
            memcpy(data, _receivedData, len);
            _dataFlag = 0;
            return len;
        }
        else
        {
            memcpy(data, _receivedData, DATA_LENGTH);
            _dataFlag = 0;
            return DATA_LENGTH;
        }

    }

    return 0;
}

Способ доступа к _socketData:

iResult = _tcpSocket.getData(_socketData, MSG_LEN);
int *ptr = (int *)&_socketData;

И используйте ptr [i] (i = 0 ... 5) для доступа к номерам.Но это не работает, я не получаю то, что хочу.Не могли бы вы, ребята, решить мою проблему, спасибо.

Есть код, как я отправляю массив int через клиента:

while (1) 
{
    ifstream infile;
    infile.open(open_path);
    if (!infile)
        cout << "error" << endl;

    string str;
    double temp;
    int length;
    int array[6];

    cout << "store to vector" << endl;
    vector<double> ve;
    while (infile >> temp)
    {
        ve.push_back(temp);
    }

    for (int i = 0; i < ve.size(); i++)
    {
        array[i] = ve[i] * 10000;
    }

    iResult = send(ConnectSocket, (char*)array, (int)sizeof(array), 0);

    if (iResult == SOCKET_ERROR) {
        printf("send failed with error: %d\n", WSAGetLastError());
        closesocket(ConnectSocket);
        WSACleanup();
        return 1;
    }
    else {
        cout << "success" << endl;
        Sleep(500);
    }
}
...