Mon application client doit être capable de récupérer dans plusieurs situations. À la mise sous tension, le client lit l'adresse et le port d'un fichier et tente de se connecter au serveur. Si c'est la première fois que ce client a été utilisé sur cet hôte, une adresse IP par défaut est essayée mais cela peut être incorrect. L'utilisateur doit ensuite entrer l'adresse IP correcte. Le port est codé en dur. La façon dont cela fonctionne est maintenant une seconde d'swing.Timer tente d'obtenir le statut du serveur ...Programmation robuste Java Socket
statusTimer = new Timer(ONE_SECOND, new ActionListener() {
public void actionPerformed(ActionEvent e) {
final byte GET_STATUS = 20;
SendCommand(GET_STATUS, null);
}
});
statusTimer.start();
S'il n'y a pas de connexion de l'utilisateur est invité à se connecter ...
private void SendCommand(byte command, byte[] parameters) {
if ((null == socket) || (null == outputStream) || socket.isClosed())
if (JOptionPane.YES_OPTION ==
JOptionPane.showConfirmDialog(null, "Connect?"))
Connect();
...
private void Connect() {
String s = (String)
JOptionPane.showInputDialog(null, "Enter IP Address", ipAddress);
if (validateIp(s)) {
ipAddress = s;
connectTask = new ConnectTask();
connectTask.start();
...
Le socket est ouvert, les flux io sont définis et un RxThread est démarré.
class ConnectTask extends Thread {
@Override public void run() {
try {
if (null == socket) socket = new Socket(ipAddress, TCP_PORT);
if (null == outputStream) outputStream = socket.getOutputStream();
if (null == inputStream) inputStream = socket.getInputStream();
if (null == rxThread) rxThread = new RxThread();
...
Il y a quelques mauvaises choses qui pourraient se produire à ce moment, par exemple:
1. Le serveur pourrait être lorsque le client est sous tension. Quelle est la meilleure façon pour le client d'ouvrir automatiquement le socket, de définir les flux io et de continuer lorsque le serveur est sous tension?
2. De la même manière, le serveur peut voir un cycle d'alimentation pendant une lecture, une écriture ou aucune. Y at-il un bon moyen de récupérer automatiquement après le rétablissement du courant?
3. L'adresse IP peut devoir être corrigée comme mentionné ci-dessus.
Ce serait bien de gérer ces situations et d'autres sans que l'utilisateur doive fermer et ouvrir l'application client ou mettre le système sous tension. Quels types d'approches sont nécessaires pour une socket client java pare-balles?
This et this sont similaires mais beaucoup avec les sockets serveur