ft_irc

8028 ワード

IRC


  • コンセント


  • プロセスは、データをネットワーク世界にエクスポートまたは受信する実際のウィンドウです.

  • プロセスは、データを送信または受信するために、ソケットを開き、ソケットにデータを書き込みおよび読み取ります.

  • ソケットは、プロトコル、IP、およびポート番号として定義されます.
    -プロトコル:あるシステムが別のシステムとシームレスに通信できるようにする通信プロトコル.
  • IP:グローバルコンピュータの一意識別アドレス
  • ポート:ネットワーク上で通信するためにホスト内部で割り当てられる一意の数値.1台のホスト内でネットワーク通信を行うプロセスを識別する値.同じホスト内で、異なるプロセスが同じポート番号を持つことはできません.(=同じコンピュータ内でプログラムを識別する番号).
  • =>ソケット:2つの独立したホストを接続するためのツール、インタフェースロール、およびデータ交換可能な構造体で、ソケットを使用してデータチャネルを作成できます.
    役割に応じてサーバソケットとクライアントソケットに分割

    ポート

  • 抽象的でソフトウェア化されたポート->ネットワーク上で他のコンピュータに接続されている部分またはチャネルだと思います.
  • バインドポート

  • メールの送信位置とメソッドの構成情報を決定します.
  • メール受信ポートバインドタイプ
  • メッセージ送信ポートバインドタイプ
  • sockaddr

  • は、選択されたプロトコルに依存する.
  • 構造体のsockaddr構造体およびsockaddrは、IPv 4とともに使用される.
  • struct sockaddr {
            ushort  sa_family;
            char    sa_data[14];
    };
    
    struct sockaddr_in {
            short   sin_family; //주소 체계를 저장하는 필드
            u_short sin_port; //포트 정보 저장
            struct  in_addr sin_addr; //IPv4주소를 저장. 타입 in_addr구조체
            char    sin_zero[8]; //사용하지 않는 필드. 0으로 채워줘야 함.
    };

    htons()

  • データをネットワークバイト順
  • に変換する.
  • データはバイト単位で格納されているが、格納方式ではCPUごとに差がある.4バイトサイズのintデータを格納すると、最低バイトから格納するCPUと、最高バイトから格納するCPUがあります.前者をLittle Endian方式、後者をBig Endian方式と呼ぶ.
  • したがって、
  • は、異なるデータ記憶方式のシステム間で通信を行うと、全く不要な値間の交換が発生する可能性がある.一方は12345を出したが、他方はわけがわからず365779719の問題を受け入れた.
  • これらの問題を解決するために、データ通信時には、ネットワークバイト順に明示的にデータのバイト順が変更される.ネットワークbyteorderはBigEndiasanに従います.
  • リモートホストとデータ通信を行う場合は、送信時にネットワークバイト順、受信時にホストバイト順に変更します.
  • htons()関数は、短いintger(通常は2 byte)データをネットワークバイト順に変更します.
  • Retrun:ネットワークバイト順の2バイト値.
  • bind()

  • bind(hListen, (SOCKADDR*)&tListenAddr, sizeof(tListenAddr));
  • bind(ソケット、ソケットコンポーネント構造体のアドレス、その構造体の大きさ);
  • アドレス情報を
  • スロット=Listenスロットに接続する役割は接続を承認することですが、bind関数を使用して上記のアドレス情報をスロットにバインドします.
  • Listen()

  • 接続を受信した場合、コンセントの状態を変更します.=コンセントを待機状態にする.
  • kqueue()

  • kqueue()システム呼び出し指定kqueueファイル記述子.このファイル記述子は、フィルタに基づいてカーネルイベントの発生または一致条件(conditionhold)を決定する方法を提供する.
  • kevent 61 s構造体

    struct kevent64_s
    {
        uint64_t ident; /* 이벤트 식별자 (identifier for this event) */
        int16_t filter; /* 이벤트 필터 (filter for event) */
        uint16_t flags; /* 일반 플래그 (general flags) */
        uint32_t fflags; /* 필터 플래그 (filter-specific flags) */
        int64_t data; /* 필터 데이터 (filter-specific data) */
        uint64_t udata; /* 사용자 데이터 (opaque user data identifier) */
        uint64_t ext[2]; /* 필터 확장 (filter-specific extensions) */
    };
  • identイベントソースを識別する値.正確な分析はフィルタによって決定されますが、主にファイルディスクバッチによって決定されます.
  • フィルタは、イベントを処理するためのカーネルフィルタを識別します.定義済みのシステムフィルタについて説明します.
    3 .flagsイベントで実行される操作.
  • fflagsフィルタマークに従います.
  • データは
  • データフィルタから取得されます.
  • udataカーネルを介して渡される不透明なユーザー定義値は変更されません.あるいは、keventシステムの唯一の決定の一部であってもよい.
    +7.ext[2]このフィールドは、イベントフィルタの拡張子を保存します.展開タイプは、使用するフィルタによって異なります.
  • kevent64()

  • Kevent()、Kevent 64()およびKevent qos()システム呼び出しは、eventlistのイベント数を返し、neventsに最大で提供される値を返します.changelistの要素の処理中にエラーが発生し、eventlistに十分なスペースがある場合、イベントはタグに設定されたEV ERRORとデータのシステムエラーとともにイベントリストに配置されます.そうでなければ、-1が返され、errnoがエラー条件を表示するように設定されます.タイムアウトが期限切れになると、kevent()、kevent 64()およびkevent qos()は0を返します.
  • EV_SET64()

  • EV SET()マクロは簡単にKevent構造を初期化できます.同様に、EV SET 64()はKevent 64 s構造を初期化し、EV SET QOS()はKevent qos構造を初期化する.
  • recv()

    int send(int socket, const void *msg, size_t len, int flags);
    int recv(int socket, void *buf, size_t len, int flags);
  • intソケット:通信本体であるスロットディスクスタンド
  • send:情報を受信するスロットディスク立盤アドレス
  • recv:メッセージを送信するスロットディスク立盤アドレス
  • constvoid*msg:相手に送信するデータポインタ
  • void*buf:受信メールを格納するためのバッファポインタ
  • size tlen:送信メールのサイズ(バイト単位)
  • intflag:フラグ(オプション)
  • return:実際に送信(受信)したバイト数、失敗した場合-1

    accept()


  • SOCKET hClient = accept(hListen, (SOCKADDR*)&tClntAddr, &iClntSize);

  • accept(ソケット、ソケットコンポーネントアドレス体のアドレス、その構造体サイズの変数を含むアドレス);

  • accept関数を使用して接続要求を受け入れます.アクションは同期して実行されます(リクエストが完了するまで待機します=リクエストが入るまでこの関数は終了しません).

  • 接続リクエストが承認されると、接続のソケットが作成され、返されます.このようにして作られたコンセントを利用して通信する.

  • 最初のパラメータはコンセントに入れることです.

  • 2番目のパラメータは、受信するクライアントアドレス情報構造体のアドレスである.(SOCKA DDR*タイプ変換)

  • 3番目のパラメータは、2番目のパラメータである構造体サイズの変数を格納するアドレスを含む.
  • ソース


    リンクテキスト
    リンクテキスト