我希望能够使用send()和recv()调用通过套接字发送或接收任意数量的数据。为了实现这一点,我创建了一个while循环,直到send()或recv()调用返回0字节(假设没有错误-1)时才会终止。说明以前发送或接收的数据:
-
跟踪返回的字节数
-
连续调用send()/recv(),直到函数返回0
-
更新数据中的指针点,以便只引用SDENE()/ReCVE()尚未处理的数据项。[使用指针算法]
下面的代码是用'c'编写的psuedo代码
发送循环:
/* bunch of socket code above */
ssize_t condition;
do
{
ssize_t return_bytes = send(fd_socket, data, DATACHUNK, 0);
if (return_bytes == -1)
{
perror("Problems sending...");
exit(EXIT_FAILURE);
}
condition = return_bytes;
data = data + return_bytes;
} while (condition > 0);
接收循环:
/* bunch of socket code above */
ssize_t = condition;
ssize_t = total = 0;
memset(data_buffer, 0, BUFFSIZE);
do
{
ssize_t return_bytes = recv(fd_socket, data_buffer, BUFFSIZE - 1, 0);
if
{
perror("Problems receiving...");
exit(EXIT_FAILURE);
}
condition = return_bytes;
data_buffer = data_buffer + return_bytes;
total = total + return_bytes;
} while (condition > 0);
data_buffer[total] = '\0';
不幸的是,当尝试升级char array[]数据缓冲区时,出现错误:“array not assignable”。我认为数组衰减为指向内存中数据块开始的指针(索引0)。如何更新指向char数组的指针,以便发送任意大小的消息?如果我将字符数据缓冲区声明为:
char * data[DATASIZE]
而不是
char data[DATASIZE]
是吗?