2

cでのソケットプログラミングでは、サーバープログラムでソケットアドレスを指定するのはなぜですか? とにかくクライアントプログラムでソケットアドレスを指定するため、サーバープログラムでソケットアドレスを指定する理由を理解できません。サーバープログラムで指定する必要があるのは何ですか。

コードは次のとおりです。

bzero((char *)&serv_addr,sizeof(serv_addr));

serv_addr.sin_family=AF_INET;

serv_addr.sin_addr.s_addr=inet_addr(argv[1]);

serv_addr.sin_port=htons(atoi(argv[2]));
4

4 に答える 4

3

ほとんどのサーバーはソケットアドレスを明示的に指定せず、INADDR_ANY(@ybo アドレスとして) 使用します。

ただし、サーバーがアドレスを指定する理由は、クライアントが到達するインターフェイスを制御するためです。たとえば、アドレス 127.0.0.1 (localhost) にバインドして、クライアントがローカル マシンのみで実行されるようにし、リモート接続に関連するセキュリティ リスクを軽減することができます。リモート クライアントをより適切にサンドボックス化するために、外部ポートに明示的にバインドすることもできます。

于 2013-04-11T11:24:45.023 に答える
1

実際には残りと同じ答えですが、言い換えれば:

通常、サーバーは 1 つのパブリック IP アドレスのみを使用します。また、1 つ以上の内部 IP アドレスも持っています (localhost 127.0.0.1 や lan 192.168.0.1 など)。

ただし、サーバーは簡単に複数のパブリック IP アドレスを持つこともできます。これらはホスティング プロバイダーから提供されます (料金が発生する場合があります)。

サーバーは、ポート 443 で複数の HTTPS 証明書をホストする場合、それぞれが特定の IP アドレスにバインドされているため、複数のパブリック IP アドレスが必要です。

リッスンする場合、1 つの特定の IP アドレスでリッスンできるため、他の IP アドレスからのトラフィックを無視できます。他のアプリケーションが他の IP アドレスで同じポート番号を使用することもできます。

セキュリティ上の理由から、アプリケーションを localhost からのみ接続したい場合 (たとえば、クライアントとサーバーが同じマシン上にある場合)、すべての IP ではなく 127.0.0.1 のみをリッスンする方が適切です。

于 2013-04-11T11:30:20.643 に答える