私はキューを作成し、それを管理しようとしていました。udp 単一サーバー/複数クライアント アプリケーションでアクティブなクライアントの記録を保持するためにキューが必要でした (udp の使用を余儀なくされているため、tcp への移行は提案しないでください)。
単一のサーバーと x 個のクライアントがあります。クライアントが最初のメッセージを送信するたびに、このクライアントの IP 番号とポート番号がキューに push() されます。
次に、5 秒ごとに、サーバーはキューから IP とポート番号を pop() し、この IP とポート番号を使用してクライアントにメッセージを送信します。クライアントが特定の時間内に返信した場合、それは「アクティブ」と見なされますが、タイムアウト内にクライアントから返信を受信しなかった場合、クライアントは停止していると見なされ、キューから削除する必要があります。
問題は、このノードを削除する方法です。1 つのオプションは、単にこのノードの代わりに NULL を追加することですが、キューからこのノードを完全に削除したいと考えています。
どんな提案でも大歓迎です。
以下は私のコードです:
struct node
{
int rollno;
struct node*n;
};
struct node* create()
{
struct node*q;
q=(struct node*)malloc(sizeof(struct node));
return q;
}
void push(struct node*cur)
{
if(head==NULL)
{
head = cur;
tail = cur;
start = cur; //keeps a track of first node
}
else
{
struct node*f;
f=head;
head->n = cur;
head=head->n; //keep updating head
}
}
struct node* pop()
{
struct node*p;
struct node*s = NULL;p = tail;
if (p == head && tail != head) /*if at the end of list, display starting from first element as Queue is FIFO*/
{
p = start;
tail=p->n;
s = p;
display(s);
return s;
}
if(p == NULL)
{
if (start == NULL) //if no emelemt yet in the Queue
return NULL;
else // if at the End of list, go back to start
{
p = start;
tail=p->n;
s = p;
}
}
else
{
tail=p->n; //keep updating tail
s = p;
}
display(s);
return s;
}
void main()
{
while(1)
{
//if new client
struct node*j;
j = create();
// j= ip and port of client.
j->n=NULL;
push(j);
//after every 5 secs
{
pop();
//if client fails to reply
{
delete node.
}
}
}
}