ネットワークプログラミングのレビュー - 知識(C)

序文

ネットワークプログラミングの仕上げについてのある程度の知識。

テキスト

私たちのコンピュータネットワークへ1.転送データは、どのようにそのアプリケーションを知るために送信されますか?
ポートを介して、ポートも占有繰り返すことはできません。

  1. ここでのsockaddr_inの定義は次のとおりです。
typedef struct sockaddr_in {

#if(_WIN32_WINNT < 0x0600)
    short   sin_family;
#else //(_WIN32_WINNT < 0x0600)
    ADDRESS_FAMILY sin_family;
#endif //(_WIN32_WINNT < 0x0600)

    USHORT sin_port;
    IN_ADDR sin_addr;
    CHAR sin_zero[8];
} SOCKADDR_IN, *PSOCKADDR_IN;

家族1.sin_familyアドレス設け
2.sin_portポート番号、すなわち、2つの16ビット・バイト、ポート1〜65535、ポート番号が予約されている請求項1〜1000、我々は使用できませんされません、ただ、最後のない操作を行います。
;:1024-5000 BSD一時的なポートは、一般的なアプリケーションでは、1024から4999までの通信に使用する
ユーザーインターフェイスをカスタマイズするために使用さBSDサーバ(非特権)ポート、:5001から65535を。

  1. IPアドレスの定義
typedef struct in_addr {
        union {
                struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { USHORT s_w1,s_w2; } S_un_w;
                ULONG S_addr;
        } S_un;
#define s_addr  S_un.S_addr /* can be used for most tcp & ip code */
#define s_host  S_un.S_un_b.s_b2    // host on imp
#define s_net   S_un.S_un_b.s_b1    // network
#define s_imp   S_un.S_un_w.s_w2    // imp
#define s_impno S_un.S_un_b.s_b4    // imp #
#define s_lh    S_un.S_un_b.s_b3    // logical host
} IN_ADDR, *PIN_ADDR, FAR *LPIN_ADDR;
  1. sin_zero
    のみサイズと一致する保持部材が挿入さsock_addr_in sockaddr構造体へ。
    以下はsockadrrの文です:
typedef struct sockaddr {

#if (_WIN32_WINNT < 0x0600)
    u_short sa_family;
#else
    ADDRESS_FAMILY sa_family;           // Address family.
#endif //(_WIN32_WINNT < 0x0600)

    CHAR sa_data[14];                   // Up to 14 bytes of direct address.
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;

理由だけでCHARのsa_data [14]; IPアドレスとポートの保全、あまりにも面倒、余分な補助的な部分は、0であるのsockaddr_inユーザーフレンドリーな操作を参照するようにします。

メモリにデータを保存5.cpu二つの方法があります。

ビッグエンディアン:下位アドレスに格納されている上位バイト。
リトルエンディアン:高アドレスに格納されている高位バイト。
たとえば:00000000 00000000 0,000,000,000,000,001進INT32数1、
これはビッグエンディアンです。
そして、リトルエンディアンである:00000001 00000000 00000000
私たちが実際にバイナリ信号を、渡さ渡すときので。
あなたはリトルエンディアン、ビッグエンディアン番番に遭遇した場合は彼らがデータを受信し、正しいですが、理解は同じではありません。
したがって、すべての資本エンディアン大会にデータを送信するとき。
したがって、次のいくつかの機能を持ちます:

unsigned short htons(unsigned short);
unsigned short ntohs(unsigned short);
unsigned long htonl(unsigned long);
unsigned long htonl(unsigned long);

H:ホストバイトシーケンス
T:に
ネットワークバイト順:N-
S:ショート
L:長い
長い限り、Linuxの4つのバイトとして、IPに変換するために使用することができる理由
ポートを変換するために使用htonsを。
だから、トランスポートアドレスは次のとおりです。

serverAddr.sin_family = AF_INET;
serverAddr.sin_addr.s_addr = htonl(INADDR_ANY);
serverAddr.sin_port = htons(atoi(argv[1]));

INADDR_ANYは、自分の内部仮想ネットワークは、最後には、手動で記入する場合は127.0.0.1など、これは、1つのIPアドレスのみのための唯一のケースで、内部IPの自動取得です。
私たちが割り当てる実際のプロセスは以下のとおりです。

addr='127.0.0.1'
inet_aton(addr,&addr_inet.sin_addr);

次のような機能は以下のとおりです。たとえば、私たちは住所を書くときです:127.0.0.1
私たちは本当にある32ビットのint型、32バイトに変換する必要があります。この時そう。
INET_ATONを変換するために使用され、私たちは手計算を避けます。

おすすめ

転載: www.cnblogs.com/aoximin/p/12239458.html