2017-03-07 21 views
0

struct sockaddr_in servaddr, cliaddr;
私はソケットプログラミングの初心者です。
ソケットプログラミングでのこのステートメントは何を意味していますか?
sockaddr_inという名前の構造体を作成していますか?servaddrおよびcliaddrメンバーですか?なぜ彼らのデータ型は言及されていないのですか?構造体は何ですか "sockaddr_in servaddr、clientaddr;"平均?

答えて

3

cでのソケットプログラミングでのこのステートメントは何ですか?

struct sockaddr_inという2つの未初期化変数が宣言されています。

sockaddr_inという名前の構造体を作成していますか?

いいえ、変数を宣言するために既に定義されている必要があります。そうでないとプログラムが不正です。

servaddrおよびcliaddrメンバーですか?

いいえ。

なぜデータ型が記述されていないのですか?

です。あなたの最初の質問に対する答えを見てください。 Unixソケットで

1

、ヘッダnetinet/in.hは、このような何かstructタイプsockaddr_inを定義しています

struct sockaddr_in { 
    short   sin_family; // e.g. AF_INET, AF_INET6 
    unsigned short sin_port;  // e.g. htons(3490) 
    struct in_addr sin_addr;  // see struct in_addr, below 
    char    sin_zero[8]; // zero this if you want to 
}; 

struct in_addr { 
    unsigned long s_addr;   // load with inet_pton() 
}; 

(参照:http://beej.us/guide/bgnet/output/html/multipage/sockaddr_inman.html

あなたservaddrcliaddrがあなたのsockaddr_in型の構造体の名前ですが。どちらも(少なくともUnixでは)4人のメンバー(short sin_familyなど)を持っています。 (メンバーの一人が一つのメンバーunsigned long s_addrを持つ数行の後に定義されてsin_addr呼ばstructタイプin_addrである。唯一のメンバーを持つ構造体のための理由があります、あなたはあまりにもstackoverflowの中でそのための説明を見つけることができます。)

の場合sockaddr_inを使用したい場合は、#include <netinet/in.h>またはWindowsのnetinet/in.hに相当する必要があります(自分で構造体を定義しない限り)。

関連する問題