【问题标题】:Send raw binary data over C socket?通过 C 套接字发送原始二进制数据?
【发布时间】:2012-10-11 09:22:39
【问题描述】:

我正在努力通过 C 中的套接字发送加密数据。一切正常,直到我意识到正在发送的数据的大小比它应该的要大得多。下面这段代码描述了这种情况:

#include <stdlib.h>
#include <stdio.h> 
#include <string.h>

int main() {
    char temp[100], buffer[100];
    int n = 1234567890;
    sprintf(temp, "%d", n);
    printf("Original n has size: %d\n", sizeof(n)); // 4
    printf("Buffer size: %d\n", strlen(temp));      //10
    printf("Buffer: %s", temp);
}

问题是原始数字被存储为一个4字节的整数,而缓冲区是一个字符一个字符的存储,所以通过套接字发送的不是4个字节,而是10个一个字节的字符。

我想知道有没有办法将二进制数据作为原始数据发送?

【问题讨论】:

    标签: c sockets networking


    【解决方案1】:

    更仔细地检查send(2) 系统调用。它接受const void *buf。它的不是 char*。作为void *,您可以发送任何类型的数据。

    这应该可行,

    int n = 1234567890;
    int net_n = hton(n);
    send(sockfd, const (void *)(&net_n), sizeof(n), 0)
    

    【讨论】:

      猜你喜欢
      • 2012-08-23
      • 2020-09-08
      • 1970-01-01
      • 2013-08-21
      • 1970-01-01
      • 2011-12-03
      • 2017-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多