C - 套接字编程 - 任意发送/接收 - 指针算术 - 数组不可分配

标签 c arrays sockets pointers

我希望能够使用 send() 和 receive() 调用通过套接字发送或接收任意数量的数据。为了实现这一点,我创建了一个 while 循环,直到 send() 或 recv() 调用返回 0 字节为止(假设没有错误 -1),该循环不会终止。考虑之前发送或接收的数据:

  1. 跟踪返回的字节数
  2. 连续调用send()/recv()直到函数返回0
  3. 更新指向数据的指针,以便它们仅引用尚未被 send()/recv() 处理的数据条目。 [使用指针算术]

下面的代码是用“C”编写的伪代码
发送循环:

/* 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[ ] 数据缓冲区时,我收到错误:“数组不可分配”。我认为数组退化为指向内存中数据 block 开头的指针(索引 0)。如何更新指向我的 char 数组的指针,以便我可以发送任意大小的消息?如果我将字符数据缓冲区声明为:
,会有什么不同吗? char * data[DATASIZE] 而不是 char data[DATASIZE]

最佳答案

在循环之前,创建一个单独的指针变量,该变量指向要开始的数组的开头。然后将该指针传递给 recv 以在调用后读取并递增指针。

关于C - 套接字编程 - 任意发送/接收 - 指针算术 - 数组不可分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50778208/

相关文章:

arrays - 创建数组时使用 OpenMP 时出现段错误

php - PHP 数组中的重复数据条目

python - 如何检查一个数字是否已经在二维 numpy 数组的第一列中

PHP http_get vs fsockopen 到 HTTPS 服务器?

c - 如何设置我的代码/VS10 以识别 .c 文件中的 CUDA 函数调用?

python - 'strsep' 导致 Linux 内核卡住

java - 为什么我的变量不指向同一个数组?

sockets - 如何禁用setsockopt()设置的超时?

c++ - .NET 从具有 www 接口(interface)的打印机获取数据

c - 如何在特定 IP 上打开套接字