-2

我一直在使用这些读写函数(由@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需要 a const char *,而不是我正在使用 a uint16_t...
这些调用应该如何?谢谢。

4

1 回答 1

1

代替

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);
}

您肯定还想在阅读功能中添加错误检查!


此外,在不同硬件平台之间发送/接收时,您还想处理可能的字节顺序(字节顺序)问题。

于 2017-01-15T15:38:01.310 回答