1

我有以下代码:

int * buffer;
buffer = (int *) malloc((320*240)*sizeof(int));

填充buffer数据后,我想使用 UDP 套接字发送它,但是目前我的以下send函数似乎只发送 4 个字节(数据)而不是((320 * 240)* sizeof(int)):

iError = send(MySock, (char *)(buffer) , sizeof(buffer), 0);

我在send函数的第二个和第三个字段上尝试了不同的组合,但它不起作用,我应该使用什么正确的语法?

顺便说一句,我必须定义bufferas ,int *因为它被其他必须获得 as 的库使用int *

4

4 回答 4

4

这是因为在您的send()通话中,您指定了sizeof (buffer). 这是变量缓冲区的大小,也就是指针的大小,在您的系统上恰好是四个字节。这不是指针指向的块的大小,该信息不可用。

您必须指定320 * 240 * sizeof *buffer以获得正确的大小。当然,更好的方法是将其分解为一个变量:

int *buffer;
const size_t buffer_size = 320 * 240 * sizeof *buffer;

if( (buffer = malloc(buffer_size)) != NULL )
{
  /* ... fill buffer ... */
  send(MySock, buffer, buffer_size, 0);
}

无需投射、malloc()返回void *send()接受它。

请注意,由于 IP 分段,send()在 UDP 上执行非常大的 s可能不起作用。根据我的经验,最好使用许多小数据报发送它。

于 2013-01-18T13:57:48.233 回答
2

sizeof(buffer)是指针类型的大小,在您的系统上显然是 4 个字节。

跟踪缓冲区 ( 320 * 240 * sizeof(int)) 的长度并将其传递给send().

于 2013-01-18T13:57:09.433 回答
1

采用

send(MySock, (char *)(buffer) , (320*240)*sizeof(int), 0);

代替

send(MySock, (char *)(buffer) , sizeof(buffer), 0);

buffer是指针类型,指针的大小4 byte适用于您的系统(对于其他系统,它可能是 8 个字节(如 64 位机器)

您必须输入分配内存的大小而不是指针的大小。分配内存的大小与指向的指针的大小不同

于 2013-01-18T13:56:43.243 回答
0

错误在这一行

iError = send(MySock, (char *)(buffer) , sizeof(buffer), 0);

您告诉 send 发送指针的大小,即 4 个字节。你需要给它 (320*240)*sizeof(int)。

于 2013-01-18T13:57:53.913 回答