2009-03-19 2 views

Antwort

6

Mit der two-argument constructor, sagen Sie Java, sofort zu verbinden. Was Sie suchen, ist wahrscheinlich

Socket socket = new Socket(); 
// Configure socket here 
socket.connect(new InetSocketAddress(serverAddr, portNumber), 3000); 
if (! socket.isConnected()) { 
    // Error handling 
} else { 
    // Use socket 
} 

Dies wird immer noch für 3s blockieren. Wenn Sie das verhindern möchten, verwenden Sie einen Thread für die Verbindung.

3

Ich werde das Offensichtliche empfehlen: Verwenden Sie ein separates Gewinde, um dies zu tun. Der Thread kann einfrieren, ohne die Anwendung einzufrieren.

0

Dies kann zu einfach sein (da es nicht mit befasst, wie man „re-join“ die Fäden nach der Verbindung abgeschlossen ist -. Unter der Annahme, dass Sie das tun müssen)

Auch wenn dies wird passieren oft, möchten Sie eine Executor (Thread-Pool) verwenden, anstatt manuell erstellen Sie Ihre eigenen Thread - Thread-Erstellung/Zerstörung ist teuer.

ich auch Vernachlässigung Ausnahmebehandlung in diesem Snippet (das ist nicht ganz trivial.)

Runnable runnable = new Runnable() { 
    public void run() { 
     InetAddress serverAddr = InetAddress.getByName(serverAddress); 
     String hostname = serverAddr.getCanonicalHostName(); 
     Socket socket = new Socket(new InetSocketAddress(serverAddr, portNumber), 3000); 
     /* ... do more of your after-connection processing here, assuming it doesn't 
     * need to be in the original "dispatch" thread. 
     */ 
    } 
}; 

Thread t = new Thread(runnable); 
t.start(); 
Verwandte Themen