gpt4 book ai didi

c++ - 将数组传递给发送UDP数据包的函数

转载 作者:行者123 更新时间:2023-11-28 00:50:45 26 4
gpt4 key购买 nike

我正在使用 Winsock2 套接字通过 UDP 传输一些数据。我在将数组传递到 sendTo() 函数以发送数据时遇到困难。

我已经编写了一个 mySocket 类以供将来重用,目前我有以下方法,该方法有效。

bool MySocket::sendData()
{
short int values[] = {1000,2000,3000,4000,5000};
int ret = sendto( sd,(const char*)values, sizeof(values) , 0, (sockaddr *)&sin, sizeof(sin) );
if(ret == SOCKET_ERROR)
{
return false;
}
return true;
}

现在我想传入一个数组而不是

short int values[] = {1000,2000,3000,4000,5000};

所以新函数看起来像:

bool MySocket::sendData(short int data[])
{
short int * values = data;
int ret = sendto( sd,(const char*)&values, sizeof(data) , 0, (sockaddr *)&sin, sizeof(sin) );
if(ret == SOCKET_ERROR)
{
return false;
}
return true;
}

当函数被调用时,调用将是:

short int data[] = {1000,2000,3000,4000,5000}; //Or some other pre-assembled list of short ints
if(socket->sendData(data))
cout << "Server: Packet Sent" << endl;
else
cout << "Server_Error: Packet failed to send" << endl;

我似乎只是在获取数据或值的指针地址。我一直在玩弄“&”和指针,但除了指针指向的第一个数字之外,还没有找到传输任何东西的正确方法。我主要用 C# 编写代码,现在切换回 C++ 已经让我的指针技能生锈了。

我如何传递或使用传入的数组来正确发送它?

最佳答案

MySocket::sendData 得到的应该是指向数据的指针,而不是指针的地址。 sizeof 不是检查元素数量的正确方法。事实上,正如您所说,这将是 sizeof 指针。此外,您应该将 (const char *)values 传递给 sendto。这样就可以了。要计算要发送的字节数,请将元素数乘以 sizeof(short)。所以我建议您将元素的数量作为附加参数传递给 MySocket::sendData。它看起来像这样:

bool MySocket::sendData(short int data[], int n_data)
{
int ret = sendto(sd, (const char*)values, n_data * sizeof(short) , 0, (sockaddr *)& sin, sizeof(sin));
if(ret == SOCKET_ERROR)
{
return false;
}
return true;
}

关于c++ - 将数组传递给发送UDP数据包的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14202863/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com