通过C套接字发送原始二进制数据?
我正在努力通过C中的套接字发送加密数据。一切正常,直到我意识到发送的数据的大小比它应该的大得多。 下面的代码描述了这种情况:
#include #include #include 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个字节,而是一个字节字符的10s。
我想知道有没有办法将二进制数据作为原始数据发送?
更仔细地检查send(2)系统调用。 它接受const void *buf
。 它不是 char*
。 void *
您可以发送任何类型的数据。
这应该工作,
int n = 1234567890; int net_n = hton(n); send(sockfd, const (void *)(&net_n), sizeof(n), 0)