Socket Serverは、待ち受けポートとIPを指定します。

1558 ワード

Socket Serverは、待ち受けポートとIPを指定します。
  TCP/IPはネットワークプログラミングを行う時、socket関連関数を使用します。各関数の詳細はここで紹介します。https://www.cnblogs.com/liedElxa/p/10795398.html
需要の説明
例えば10.0.0.1、10.0.0.2、10.0.0.3の3つのネットワークカードが使用されている場合を考慮して、私たちは8080番ポートのサーバーを作りたいです。しかもお客様の訪問だけが10.0.0.1:8080に応答します。アクセスは10..2:8080または10.0.0.3:8080になります。  はTCP/IPネットワークプログラミングを行う過程で、一般的にserv_adrをバインディングする時、serv_を使用する。adrをバインディングします
解決策
serv_adr構造体の定義は以下の通りである。
struct sockaddr_in {

  short int sin_family; 		/*      */

  unsigned short int sin_port; /*    */

  struct in_addr sin_addr; 	/* Internet    */

  unsigned char sin_zero[8]; 	/*  sockaddr       */

};
バンド関数の定義は以下の通りです。
//           address     socket   
int bind(int socket,sockaddr * address,uint addrlen);
	// socket:     socket
	// sockaddr:      Ip          
	// addrlen:        
	//    : -1    ,      ,           (     )
	//      0        IP, INADDR_ANY(0.0.0.0)          
だから、私達はserv_を設置することができます。adr構造体のs_addr値は、指定されたIP(10.0.0.1)のバインディングを実現し、その後、bind()関数を呼び出しても、その後の論理は変わらない。
	memset(&serv_adr, 0, sizeof(serv_adr));
    serv_adr.sin_family = AF_INET;
    /* INADDR_ANY              ,       SERV_PORT,            */
    //serv_adr.sin_addr.s_addr = htonl(INADDR_ANY);
    serv_adr.sin_addr.s_addr =  inet_addr("10.0.0.1");
    serv_adr.sin_port = htons(8080);
    //        ,         
    if (bind(serv_sock, (struct sockaddr *)&serv_adr, sizeof(serv_adr)) == -1)
        error_handling("bind() error");
その後のプログラミングの流れは変わりません。