5

私は暗号化されたデータを 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 バイトの文字です。

バイナリデータを生のまま送信する方法はありますか?

4

1 に答える 1

10

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-10-21T09:40:06.080 に答える