2012-10-21 75 views
2

我正在通过C中的套接字发送加密数据。一切工作正常,直到我意识到发送的数据的大小比它应该大的多。片的下面的代码描述的情况:通过C socket发送原始二进制数据?

#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个一个字节的字符。

我不知道是否有任何方式发送二进制数据为原料?

回答

6

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

这应该工作,

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