我是ccp socket的新手 . 我试图通过套接字发送一个int数组 . 我编写自己的客户端和套接字(两者都在winOS上运行) . 为了使我可以接收int数组类型,我将recvbuffer设置为int []类型并强制它在recv()函数内更改为char . 这是服务器代码的一部分:

int recvbuf[6];

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

结果很好,我可以打印出所有六个数字,这意味着我的客户端运作良好 . 但是,当我将服务器切换到另一个服务器(内置一个sdk并在linux上运行)时,我无法再访问这些数字 .

对于sdk,我的I / O看起来像这样:

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);
    }
}