Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Abbassare latenza connessione a socket

    Salve ho un piccolo problema, ho creato un'applicazione server-client perfettamente funzionante ad eccezione per 1 di una cosa.
    Praticamente quando il client prova a connettersi ad un host errato (un qualsiasi valore), manda la segnalazione dell'errore in maniera corretta, il problema però è che ci mette tanto (anche 45/60 secondi delle volte).
    Come posso risolvere questa situazione??


    codice:
    try {                    
    jTextField6.setEditable(false);                    
    port = Data.convertiStringa(jTextField2.getText());                     
    s = new Socket(jTextField6.getText(), port);                                       
    } catch (UnknownHostException ex) {
    JOptionPane.showMessageDialog(jPanel1, "Host sconosciuto: Controllare l'indirizzio del server", "Error", JOptionPane.ERROR_MESSAGE);                    
     jTextArea2.append("Host sconosciuto: controllare l'indirizzo del server.\n");                 
    jTextField6.setEditable(true); 
    } catch (IOException ex) {
    JOptionPane.showMessageDialog(jPanel1, "Host sconosciuto: Lo Stato del Server\n", "Error", JOptionPane.ERROR_MESSAGE);                     
    jTextArea2.append("Server non raggiungibile\n");       
    jTextField6.setEditable(true);

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    setSoTimeout?
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Originariamente inviato da Andrea1979
    setSoTimeout?
    ho provato ma non va

  4. #4
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    setSoTimeout serve per le successive read, non per la connessione. Purtroppo il tempo di connessione dipende dal sistema operativo sottostante e dalle comunicazioni che avvengono "sotto il cofano" e su cui non hai accesso.

    Ciao

  5. #5
    Originariamente inviato da progAnd
    setSoTimeout serve per le successive read, non per la connessione. Purtroppo il tempo di connessione dipende dal sistema operativo sottostante e dalle comunicazioni che avvengono "sotto il cofano" e su cui non hai accesso.

    Ciao
    Quindi non posso fare proprio nulla???

  6. #6
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    Che io sappia, nulla.

    Ciao

  7. #7
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    aspetta, vero con setSoTimeout ci fai poco, ma connect dovrebbe fare al caso tuo:

    Questo dovrebbe connettersi subito (ed uscire senza errori)
    codice:
    import java.net.*;
    
    public class SocketDemo {
        
        public static void main (String[] args) {
            try {
                SocketAddress sa = new InetSocketAddress("www.google.com", 80);
                Socket sock = new Socket();
                sock.connect(sa, 10000); //timeout di 10 secondi
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
    Questo invece dovrebbe lanciare un'eccezione dopo i famosi 10 secondi
    codice:
    import java.net.*;
    
    public class SocketDemo {
        
        public static void main (String[] args) {
            try {
                SocketAddress sa = new InetSocketAddress("www.google.com", 5555); //porta ad capocchiam
                Socket sock = new Socket();
                sock.connect(sa, 10000);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  8. #8
    Originariamente inviato da Andrea1979
    aspetta, vero con setSoTimeout ci fai poco, ma connect dovrebbe fare al caso tuo:

    Questo dovrebbe connettersi subito (ed uscire senza errori)
    codice:
    import java.net.*;
    
    public class SocketDemo {
        
        public static void main (String[] args) {
            try {
                SocketAddress sa = new InetSocketAddress("www.google.com", 80);
                Socket sock = new Socket();
                sock.connect(sa, 10000); //timeout di 10 secondi
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }
    Questo invece dovrebbe lanciare un'eccezione dopo i famosi 10 secondi
    codice:
    import java.net.*;
    
    public class SocketDemo {
        
        public static void main (String[] args) {
            try {
                SocketAddress sa = new InetSocketAddress("www.google.com", 5555); //porta ad capocchiam
                Socket sock = new Socket();
                sock.connect(sa, 10000);
            }
            catch (Exception e) {
                e.printStackTrace();
            }
        }
        
    }

    Grazie mille, in questo modo sembra funzionare bene!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.