ServerSocket: Connection refused Exception

RipdEaTh

Mitglied
Hallo Leute,

derzeit erstelle ich einen kleinen Message-Server und Clienten. Allerdings bereiten die beiden mir gerade etwas Kopfzerbrechen.

Wenn ich eine Verbindung über localhost aufbaue, klappt alles wunderbar. Client verbindet sich und die beiden unterhalten sich.
Nehm ich einen anderen Rechner und versuche über das Netzwerk mich zu verbinden, so bekomme ich eine ConnectionException mit der Meldung "Connection refused".

Jetzt kommt das lustige. Geh ich von diesem Rechner über Telnet an den Server, so klappt die Verbindung. Wieso aber nicht mit dem Java-Clienten? Kann mir das jemand erklären?

Ich würde mich über schnelle Antworten freuen.
Vielen lieben Dank,
RipdEaTh
 
Moin!
Sofern du alles richtig gemacht hast, wenn IP Adresse, etc soweit alles stimmt, würde ich auf die Firewall tippen, die die Verbindung blockiert...

*grüssle*
MeinerEiner
 
Hi MeinerEiner_80,

vielen Dank für deine schnelle Antwort.
Diese Idee hatte ich auch zuerst, aber die Firewall ist inzwischen deaktiviert. Die kann es also eigentlich nicht mehr sein.
Zudem macht dies auch nicht unbedingt Sinn, da Telnet sich ja verbinden kann, Java aber nicht, oder?

Hast du denn sonst noch eine Idee?
Zum Verbinden habe ich IP-Adresse sowie Hostname ausprobiert. Über Telnet beides kein Problem, über Java klappt keines der beiden.
 
Zudem macht dies auch nicht unbedingt Sinn, da Telnet sich ja verbinden kann, Java aber nicht, oder?
Da Telnet und deine Applikation aber über verschiedene Ports laufen kann das bei eingeschalteter Firefall durchaus Sinn machen!

Dann zeig halt mal deinen Code..

*grüssle*
MeinerEiner
 
Ok, also einmal die Server-Klasse, die den Server startet:
Java:
	private void startServer() {
		try {
			ivServerSocket = new ServerSocket(ivConfig.getServerPort());
			System.out.println(ivServerSocket.getInetAddress().getHostAddress());
			System.out.println("Server gestartet auf Port " + ivConfig.getServerPort() + "...");
			
			System.out.println("Baue Datenbankverbindung auf...");
			makeDBConnection();
			System.out.println("Datenbankverbindung aufgebaut...");
			
			System.out.println("Server läuft...");
			waitForConnections();
		} catch (IOException e) {
			System.err.println("Der Port " + ivConfig.getServerPort() + " wird bereits verwendet!");
			Log.log(e.getMessage());
		}
	}

	private void waitForConnections() {
		while(true) {
			try {
				Socket client = ivServerSocket.accept();
				System.out.println("Client verbunden: " + client.toString());
				
				new Thread(new Client(ivDBConnection, client)).start();
				
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}


Und hier mal der Code, der beim Clienten ausgeführt wird:
Java:
	public boolean connect() {
		
		try {
			ivServer = new Socket(ivHost, ivPort);
			
			ivInputServer = new BufferedReader(new InputStreamReader(ivServer.getInputStream()));
			ivOutputServer = new PrintWriter(ivServer.getOutputStream(), true);
			
			String inputServer = ivInputServer.readLine();
			
			if (inputServer.equals("Please log in")) {
				return login(ivEMail, ivPassword);
			}
			
			//System.out.println(ivInputServer.readLine());
		} catch (UnknownHostException e) {
			System.err.println("Der Host \"" + ivHost + "\" ist unbekannt!");
		} catch (IOException e) {
			e.printStackTrace();
		} 
	}


Ich hoffe, dass das reicht. Wenn du noch andere Methoden haben möchtest, sag kurz bescheid :)

Ich habs auch zeitweise mal damit versucht, die IP Adresse beim ServerSocket zu definieren, hat aber leider auch keine Besserung gebracht. Was mich eben so irritiert, ist, dass Telnet connecten kann, der Java-Client nicht. Das klingt für mich so nach einem Windows-Problem, oder?
 
Ich gehe mal davon aus, dass du mit IP und Port Adressen sicher bist, bzw, das überprüft hast, dass du dich auch auf die IP Adresse und den Port mit dem Client verbindest, auf dem auch der Server gestartet wurde!
Weiterhin gehe ich auch davon aus, das dein Server problemlos in die waitforConnections() Methode läuft und vorher nicht abbricht.
Wenn jetzt wirklich die Firewalls auf beiden Rechnern deaktiviert sind und nun der Client bei Zeile 4 die Exception wirft, dann.. hab ich jetzt auchmal keine Idee mehr..
Eventuell hast du in einem der Codeteile, die du nun nicht gepostet hast einen Fehler, das kann ich natürlich nicht ausschließen.
Wenn du dir wirklich sicher bist, keinen Fehler gemacht zu haben, könntest du mal diesen ganz simplen Server hier http://www.galileocomputing.de/open...17_008.htm#mj2ff4f7c8a15eb491d5bcbeb7cae97b63
ausprobieren (IP Adresse muss natürlich geändert werden). Der sollte nämlich funktionieren..

*grüssle*
MeinerEiner
 
Ich hab das Problem inzwischen behoben, bin wohl etwas überarbeitet ^^

Problem war ganz einfach, der Host war falsch. Ich hab zwar immer schön die IP in der Main-Methode geändert, die aber nie aufgerufen. Meine Klasse wurde über eine andere Klasse aufgerufen, wo die ganze Zeit localhost drin stand...

Vielen Dank an dich MeinerEiner_80
 
Zurück