web-dev-qa-db-ja.com

cのtcpソケットで構造体を送信

私は構造体を持っています:

typedef     struct {
    char            *typ;
    cid_t           cid;
    unsigned short  nbytes;
    char            *data;
} req_s; 

typedef     struct {
    char            *ip;
    unsigned short  pid;
} cid_t;

そして、私はそれをTCPソケットを介して送信したいと思います。それは可能ですか?私はそれをやった:

req_s answer;
...

if( send(sock, (void*)&answer, sizeof(answer),0) < 0 ) {
    printf("send failed!\n");
}

...

recv ( socketDesc, (void*)&answer, sizeof(answer), 0) >= 0)

しかし、私が私の構造式の回答を読みたい場合は、いくつかの象形文字しか取得しません

または、クライアントからサーバーにデータを送信して戻すためのより良い方法はありますか?

7
user1550036

ここを参照してください: Cのソケットを介して構造体を渡す 。ただし、あなたのケースでは、構造体の内部にポインタを追加しているため、contents宛先バッファへのこれらのポインタも。

5
user2793162

ネットワーク接続を介してポインターを送信することは、ポインターが指すデータがコピーされないため、通常は機能しません。たとえ別のメモリーアドレスにある場合でも、コピーされません。ネットワーク接続を介して送信するには、構造体をシリアル化する必要があります。

4
Xavier Leclercq