2012-10-21 77 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) 
相關問題