Я новичок в сокете 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);
}
}