Je travaille sur une des applications de socket à base UDP, et ici j'ai eu quelques questions sur la façon de mettre en œuvre la fonction écouter sur réception côtéMulticastSocket garder écouter la fonction
Voici une bonne façon de laisser le côté réception socket pour continuer à écouter le côté serveur? Supposons que je ne sache pas quand le côté serveur enverra le paquet à recevoir, donc je dois garder la fonction de réception toujours active. Va-t-il manquer ou comment casser la boucle while (true)? Si oui, comment "reconnecter" et rendre la boucle d'écoute encore vivante?
while(true){ try{ if (udpsocket_receiving.isClosed() || !udpsocket_receiving.isConnected()) { serverAddress = InetAddress.getByName(SERVERIP); udpsocket_receiving = new MulticastSocket(SERVERPORT) ; udpsocket_receiving.joinGroup(serverAddress); udpsocket_receiving.setSoTimeout(10000); } udpsocket_receiving.receive(recpacket); // Block of code to do with the packet } catch (SocketTimeoutException e) { // What suppose to do here if I catch this exception? } finally { udpsocket_receiving.close(); continue; } }
ci-dessus peut résoudre méthode déjà si je n'ai pas accès à Internet pour un certain temps, supposons que la méthode sera toujours prendre à droite SocketTimeoutException? Mais quand l'accès Internet reprendra plus tard, puis-je continuer à écouter quand le paquet arrive? Supposons que je reçois le premier paquet du côté de l'expéditeur et que j'exécute le code, mais que le côté expéditeur envoie un second paquet à ce moment-là, le paquet me manquera-t-il? Puisque la boucle while sur le premier paquet n'est pas fin.
Est-ce que vous pouvez fermer manuellement le socket et le rebrancher? Est-ce qu'il liera le port et ne pourra plus utiliser ce port pour un nouvel objet? dois-je mettre ceux à l'intérieur du
SocketTimeoutException
en question un?udpsocket_receiving.leaveGroup(serverAddress); udpsocket_receiving.disconnect(); udpsocket_receiving.close(); udpsocket_receiving = new MulticastSocket(SERVERPORT) ; udpsocket_receiving.setSoTimeout(10000); udpsocket_receiving.joinGroup(serverAddress);
Merci pour la réponse, donc en fonction de votre commentaire, j'ai juste besoin de retirer le bloc finally de la boucle while, et déplacer le code d'initialisation à un endroit qui ne fonctionne qu'une seule fois, ai-je raison? – Sean
aussi, comme vous l'avez dit Redoing tout cela ne résoudra pas un problème de connectivité Internet, donc si une fois la connectivité Internet est supprimée, le socket ne sera plus écouter même si la connectivité est de retour? – Sean
La socket reste valide quelle que soit la connectivité Internet à venir et à venir. – EJP