Je veux utiliser UDP-Sockets pour mon XNA-Networkgame. Et maintenant j'essaie de coder un Listenerthread fiable, mais il y a quelques problèmes.C#: UDP Listener Thread
Si j'utilise socket.Receive attendra un paquet. C'est bon pour mon Listenerthread. Mon fils a un certain temps en boucle comme ceci:
while(Listen == true)
{
socket.Receive(...);
}
Mais si j'échange Listen-Flag false (si je veux arrêter d'écouter), il sera coincé dans la dernière .Receive().
Puis j'ai regardé les méthodes .BeginReceive(). Il appellera une méthode si un paquet est arrivé. Mais pour recevoir les données, je dois utiliser .EndReceive() et c'est le point avec lequel j'ai un problème. Je veux toujours écouter les paquets et n'arrête pas d'écouter si un paquet arrive. Donc, j'utilise toujours la version bloquante avec ".Receive()". Je pourrais forcer le thread d'écoute à annuler en appelant: Thread.abort(), mais ce n'est pas bon.
Actuellement je teste si les données sont disponibles:
while(Listen == true)
{
if(socket.Available > 0)
{
socket.Receive(...);
}
}
Mais je pense que ce n'est pas la meilleure façon ... Si peu de temps après l'article si un autre thread appelle socket.Receive (..) il restera coincé involontairement. N'y a-t-il aucun moyen d'annuler la méthode .Receive (..)? J'ai essayé de définir un délai d'attente, mais si .Receive timesout, il lèvera une exception ...
Je veux un simple udp-écoute-thread, je peux arrêter gracieusement. :-) Dans MSDN je n'ai pas trouvé un exemple d'écouteur qui écoute plus d'un paquet. Comment gérer un autre programmeur cela?
« Si peu de temps après l'article si un autre thread appelle socket.Receive (..) » - cela semble impliquer qu'il ya plusieurs threads de lecture à partir de la même prise? – Ragoczy
Non, je ne fais pas ça. Mais c'est possible et je veux éviter cela :-) – user437899
Lorsque vous êtes prêt à arrêter d'écouter, fermez le socket. Le blocage 'Receive()' quittera avec une exception 'SocketException' que vous devrez attraper. –