3

Cで小さなチャットサーバーを開発しようとしています.

単純なチャット サーバーの場合、

  • (トランスポート エンドポイント) === (ソケット) ?
  • クライアントごとに 1 つのソケットを使用する必要がありますか? または、複数のクライアントでソケットを再利用できますか? もしそうなら、どのように?
  • これを行う標準的な方法はありますか?
  • 利用可能な良い参考文献はありますか?

いくつかのサンプル実装を見ることができますか? この課題には gcc コンパイラと C 言語を使用する必要があります。

4

2 に答える 2

4

ソケット/クライアントが 1 つ必要ですが、ソケットを再利用することはできません。複数のクライアントを処理する必要がある場合は、次のことができます。

  • クライアントごとに 1 つのスレッドを作成し、ブロッキング I/O (できればタイムアウト付き) を使用します。
  • シングル スレッド プログラムを作成し、select/poll/epoll/kqueue で逆多重化を使用し、ノンブロッキング I/O を使用します。
  • 非同期 I/O を使用します。

C ソケット通信の例については、 Unix Network Programmingの本がおそらく最良の情報源です。サンプルプログラムと解説が豊富です。

于 2011-08-21T19:24:50.957 に答える
2
  1. (トランスポート エンドポイント) === (ソケット) ?

番号。「エンドポイント」とは、ポート番号付きの IP アドレスを意味します。ソケットは 1 つの「セッション」を表し、セッションはローカル エンドポイント (IP、ポート) とリモート エンドポイント (IP、ポート) の 2 つのエンドポイントで構成されます。

  1. クライアントごとに 1 つのソケットを使用する必要がありますか? または、複数のクライアントでソケットを再利用できますか? もしそうなら、どのように?

1 セッションにつき 1 つのソケット。つまり、サーバーはリモート エンドポイント ( client ) ごとに新しいソケットを作成する必要があります。使用されなくなったソケットは再利用できます。SO_REUSEADDR ソケット オプションを探します。

  1. これを行う標準的な方法はありますか?

あなたが何を求めているのかわからない。チャット サービスまたはサーバー/クライアント モデルの標準的な方法は? チャット サービスについては、IRC を探してください。サーバー/クライアント プログラミング モデルは十分に文書化されています。あなたはそれをグーグルすることができます。

  1. 利用可能な良い参考文献はありますか?

http://beej.us/guide/bgnet/

これで、エラー メッセージの意味が理解できたと思います。

于 2011-08-21T19:29:27.350 に答える