こんにちは、同じプログラムでソケットをリッスンし、別のソケット(同じIPでポート番号が異なる)に同時に接続する方法を考えています。ソケットをリッスンすると、メッセージを受信するまでブロックし続けるので、同時に聞くことと接続することはできません。実際には、異なるルーター間での LSP パケットの交換をシミュレートする必要があります。そこで、ルーターをシミュレートして、n(ルーターの数)回実行するプログラムを作成しています。
誰でも進め方を共有できますか??
あなたの問題を正しく理解していれば、これらのいずれかが役立つかもしれません。
マルチスレッドまたはマルチプロセス
基本的に、クライアントを受け取ると、別のスレッドまたは新しいプロセスでクライアントを個別に処理できます。すでに接続されているクライアントを処理しながら、着信接続を受信し、他のソースから新しいクライアントに接続できます。
疑似コード:
main() {
while(1) {
accept client
/*
After the fork or creation of the new thread, the loop goes back to
accepting clients while connected clients are being processed.
*/
fork or create new thread passing and client socket to it
}
}
processClient() {
do whatever you need to do...
}
選択する
Select は、ノンブロッキング ソケットを行うもう 1 つの良い方法です。Select は基本的に、サーバーにデータ (つまり、データ、新しいクライアント要求) が来るのを待ち、それらを 1 つずつ処理します。サーバーは、処理する前に何かを受け取るまで待機するため、受け入れ時にブロックしません。
疑似コード:
main() {
while(1) {
wait on select
if new client {
accept it
}
for client in clients {
if client has data {
process it
}
}
}
}
ePoll (Linux を使用している場合)
ePoll は Select に似ていますが、より多くのクライアントを処理でき、より魅力的です。
これは、それらのそれぞれを持つレポです。私のコードは、私が学校で行ったプロジェクトであるため、ここでは完全ではありません。