私はC++のマルチクライアントチャットプログラムを書いていますが、解決できない問題がいくつかあります。
1.ユーザーが入ると、サーバーがAccept()
クライアントになり、クライアントにソケットIDを割り当てます。クライアントが切断すると、別のクライアントが入り、サーバーの後にAccept()
、クライアントは別のソケットIDを取得します。ソケットIDを再利用したいのですが、 Accept()
以前のクライアントの以前のソケットIDよりも大きなソケットIDが与えられます。では、どうすれば各クライアントにソケットIDを割り当てることができますか?
2.およびを使用select(fdmax + 1, &read_fds, NULL, NULL, NULL)
しfor(i = 0; i <= fdmax; i++)
て、存在するすべての接続をスキャンします。クライアントは、サーバーへのtenlet接続を使用できます。チャットに加えて、クライアントは私のサーバーでコマンド(ls
、などcat
)を実行できます。私のサーバーは結果を使用fork()
しdup()
てクライアントに送信します。PATH
ここに問題があります。ユーザーが新しい環境変数を割り当てるとPATH
、他のクライアントのも変更されます。どうすればこれを回避できますか?すべてのクライアントが独自のデフォルトPATH
値を持つ必要がありますか?