我有以下代码:
int * buffer;
buffer = (int *) malloc((320*240)*sizeof(int));
用数据填充缓冲区
后,我想使用UDP套接字发送它,但是目前我的以下send
函数似乎只发送4个字节(数据)和不是 ((320*240)*sizeof(int)):
iError = send(MySock, (char *)(buffer) , sizeof(buffer), 0);
我在 send
函数的第二个和第三个字段上尝试了不同的组合,但它不起作用,我应该使用什么正确的语法?
顺便说一句,我必须将 buffer
定义为 int *
,因为它被其他必须将其作为 int *
获取的库使用。
最佳答案
这是因为在您的 send()
调用中,您指定了 sizeof (buffer)
。这是变量缓冲区的大小,也就是指针的大小,在你的系统上恰好是四个字节。它不是指针指向的 block 的大小,该信息不可用。
您必须指定 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()
returns void *
send()
接受它。
请注意,在 UDP might not work, due to IP fragmentation 上执行非常大的 send()
.根据我的经验,最好使用许多小数据报来发送它。
关于c - 如何将 send() 与整数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14400419/