2013-02-05 16 views
5

Sto provando a programmare un client-server (semplice, per i principianti), solo per stabilire una connessione e vedere se funziona. E lo fa. Finché rimango nelle mie quattro mura/rete. Non appena provo a passare tramite i miei router IP, il client genera un messaggio di errore fine potente. Tutti i soliti sospetti sono stati eliminati: il Router Port forwarding è attivo, il firewall non interferisce (beh, non funziona ancora quando lo spengo), e canyouseeme.org dice che può stabilire una connessione con il mio scelto porta quando il server è in esecuzione.Errore server client di rete Java

Ecco il codice sorgente per il server, dal momento che ho capito che era possibile passare tramite la riga di comando con un po 'di telnet. Quando provo a stabilire una connessione, si dice solo Could not open connection to the host, on port 49163:Connection failed

Server:

import java.net.*; 
import java.io.*; 

public class ChatServer { 
    public static void main(String[] args) throws IOException { 

     ServerSocket server = null; 

     try { 
      System.setProperty("java.net.preferIPv4Stack" , "true"); 
      server = new ServerSocket(49163); 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: 49163."); 
      System.exit(1); 
     } 

     Socket client = null; 
     try { 
      client = server.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.exit(1); 
     } 

     PrintWriter out = new PrintWriter(client.getOutputStream(), true); 
     BufferedReader in = new BufferedReader(newInputStreamReader(client.getInputStream())); 
     String inputLine; 
     String outputLine; 

     out.println("Connection established"); 
     while ((inputLine = in.readLine()) != null) { 
      if (inputLine.equals("exit")) { 
       break; 
      } 
     outputLine = inputLine; 
     out.println(outputLine); 
     } 
     out.close(); 
     in.close(); 
     client.close(); 
     server.close(); 
     System.out.println("Server offline"); 
    } 
} 

Oh sì, preferIP4vStack era qualcosa ho preso su StackOverflow, ma non sembra funzionare per me.

Per qualche motivo non sono in grado di includere il codice per il client, continuo a ricevere messaggi sulla formattazione e non riesco a capirlo. Ma il mio modo di vedere è che non sono nemmeno in grado di connettermi tramite la riga di comando (quando provo a connettermi con l'IP "reale"), quindi il client non deve essere coinvolto. Ma per voi che vogliono vedere l'errore comunque:

java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(Unknown Source) 
    at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at java.net.Socket.<init>(Unknown Source) 
    at ChatClient.main(ChatClient.java:12) 
+0

Puoi pubblicare il codice (client?) Che genera l'eccezione? Inoltre, se si mantiene lo stesso stile con quello che sta generando l'eccezione, la stampa della traccia dello stack completo oltre al messaggio user-friendly può essere d'aiuto. – Windle

+0

Vishal, e come lo sai? –

+0

@NikolaiNFetissov: Il mio errore. C'è stata una fuga durante l'errore che l'OP ha menzionato correttamente. –

risposta

0

Non so se sono pronto a ridere o piangere ora. Un amico mi ha detto che FORSE, forse il problema potrebbe essere che provo ad accedere con l'IP esterno da un PC di rete interna, che per qualche misterioso motivo non può uscire o non posso rientrare. Got qualcuno per provare e accedere da qualche altra parte, e voilà! Funziona come un fascino.

0

Impossibile aprire la connessione con l'host, sulla porta 49163: Connessione non riuscita

No, non lo ha fatto. Quello non è un messaggio Java. Il tuo codice diceva che, quando hai preso una ConnectException che aveva un messaggio molto più dettagliato. Stampalo e potresti avere qualche speranza di scoprire cosa è andato storto. Creare i propri messaggi e sopprimere ciò che l'eccezione ti dice è raramente, se non addirittura una buona idea.

Il messaggio sarà probabilmente uno di:

  • 'Connessione rifiutata', il che significa che hai l'host o porta di destinazione sbagliata, o c'è un firewall
  • 'Timeout della connessione', che è un problema di connettività di rete
  • 'no route to host', che è un problema di routing IP
  • 'host sconosciuto', che di nuovo significa che hai sbagliato il nome del server.
+0

Ok, ho messo l'IPv4 prima di creare il socket, – tr0n0m

+0

Ho provato a modificare la domanda originale, aggiungendo il codice client, ma continuava a dirmi che la formattazione non era giusta. Il messaggio di errore è "connection refused: connect". – tr0n0m