我一直在使用这些read和 write函数(由@alk提供)。
问题是我不知道如何正确发送 uint16_t data_size;
。
这是我发送一般示例缓冲区的实际代码:
uint16_t data_size;
int retry_on_interrupt = 0;
char buffer[] = "Hello world!";
data_size = (uint16_t) sizeof(buffer);
/* sending data_size */
writen(socket, data_size, 2, retry_on_interrupt);
/* sending buffer */
writen(socket, buffer, sizeof(buffer);
这是我接收一般示例缓冲区的实际代码:
/* receiving data_size */
readn(socket, &data_size, 2);
/* receiving buffer */
readn(socket, buffer, data_size);
但这不起作用,我认为因为 writen
需要 const char *
,而不是我使用 uint16_t
...
这些调用应该如何进行?谢谢。
最佳答案
替换
writen(socket, data_size, 2, retry_on_interrupt);
由
if (-1 == writen(socket, &data_size, sizeof data_size, 1))
{
perror("writen() failed writing size");
exit(EXIT_FAILURE);
}
并替换此行
writen(socket, buffer, sizeof(buffer);
由
if (-1 == writen(socket, buffer, data_size, 1))
{
perror("writen() failed writing pay-load");
exit(EXIT_FAILURE);
}
<小时/>
您肯定也想在阅读功能中添加错误检查!
<小时/>您还想处理可能的 endianness (byte-order)在不同硬件平台之间发送/接收时出现问题。
关于c - 写入n个字节并读取n个字节: sending number of bytes to read using uint16_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41662862/