anderer Rechner wird nicht gefunden

Seppel

Bekanntes Mitglied
Sollte mein Problem schon irgend wo da sein versuche ich mich gern mit einem Link, ansonsten:

Habe mir hoffentlich alle nötigen Fertigkeiten angeignet um im netzwerk (lan) datenauszutauschen.
Habe im Netz ein sehr guten Beispiel gefunden um zwischen clients Nachrichten auszutauschen.
Nach dem ich auf meinem 1. rechner den Server gestartet habe, kann ich dort auch belibeige clients starten und diese können miteinander komunizieren. Mein zweiter Rechner steht daneben und alle Clients die ich von dort starte finden den erste Rechner nicht. Über die Konsole habe ich mal hin und her gepingt und der jeweilig andere Rechner wird auch angezeigt. Die Firewall meiner rechner sind down.

Jetzt weis ich den Grund für das Problem nicht.
Könnte es am Router liegen das es nicht funktioniert?
Ist mein code nicht geeigent?
...
Client
Java:
import java.net.*;
import java.io.*;
import java.net.DatagramPacket;
import java.net.InetAddress;

public class Client {
	static final String ANMELDUNG = "ANMELDUNG";
	static final String ENDE = "ENDE";
	static int port = 1234;
	static int length = 256; // Länge eines Pakets
	
	public static void main( String args[]) {
		String servername = "localhost";
		String text = null;
		DatagramPacket packet;
		byte[] ba = ANMELDUNG.getBytes();
		
		// Namen des Servers von Kommandozeile übernehmen
		if( args.length > 0 ) servername = args[0];
		
		
		try {
			DatagramSocket socket = new DatagramSocket();
			InetAddress ia = InetAddress.getByName( servername );
			System.out.println(ia);
			//ia =InetAddress.getByName("192.168.2.104");
			System.out.println(ia);
			packet = new DatagramPacket( ba, ba.length, ia, port);
			// sende Anmeldung
			socket.send( packet );
			
			// Lesen der empfangenen Pakete erfolgt in eigenem Thread
			LeseThread lt = new LeseThread( socket );
			
			// Eingaben von Tastatur an Server schicken
			BufferedReader br = new BufferedReader(new InputStreamReader( System.in ) );
			do {
				text = br.readLine();
				ba = text.getBytes();
				packet.setData( ba, 0, ba.length );
				socket.send( packet );
			} while( ! text.equals("ENDE") );
			
			// alles beenden
			System.exit(0);		
		}
		catch( IOException e ) {System.err.println("Ausnahmefehler: " + e );}
	}
}



class LeseThread implements Runnable {
	static int length = 256;
	DatagramSocket socket;

	LeseThread(DatagramSocket socket ) {
		this.socket = socket;
		Thread t = new Thread(this,"Lesen");
		t.start();
	}

	public void run() {
		DatagramPacket packet =
		new DatagramPacket( new byte[length], length);
		while( true ) {
			try {
				socket.receive( packet );
				InetSocketAddress add = (InetSocketAddress)packet.getSocketAddress();
				String text = new String(packet.getData(), 0, packet.getLength());
				System.out.println( add +">" + text);
				//System.out.println( ">" + text);
			}
			catch( IOException e ) {System.err.println("Ausnahmefehler: " + e );}
		}
	}
}

Server
Java:
import java.net.*;
import java.awt.event.*;
import java.io.*;
import java.util.*;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.*;

//Programm
public class DatagrammServer extends JFrame {
	private static final long serialVersionUID = 1L;	
	//Variablen####################################################################################################################### 
	// Kennungen für An- und Abmeldung
	static final String ANMELDUNG ="ANMELDUNG";
	static final String ENDE ="ENDE";
	static int port = 1234;
	static int length = 256; // Länge eines Pakets
	static boolean ende = false;
	
	//fenster
	static DatagrammServer fenster;
	static CMeinePanel m_malfläche;  		
	
	//Main#######################################################################################################################
		//main Funktion ruft das Fenster auf und startet damit das spiel
	public static void main(String[] args) {
			 fenster = new DatagrammServer("Fenster");
			 fenster.pack();
			 fenster.setSize(100,100);	
			 fenster.setVisible(true);
			 

				DatagramPacket paket =new DatagramPacket( new byte[length], length);
				Vector clients = new Vector(); // Liste der Clients
				
				try {
					DatagramSocket socket = new DatagramSocket(port);		
					
					do {		
						// Warten auf nächstes Paket
						socket.receive( paket );
						InetSocketAddress add = (InetSocketAddress)paket.getSocketAddress();
						
						// Text aus Paket extrahieren
						String text = new String(paket.getData(), 0, paket.getLength());
						InetAddress address = paket.getAddress();
						int port = paket.getPort();
						int len = paket.getLength();

						System.out.println("Anfrage von " + address + " vom Port "	+ port + " Laenge " + len + "\n");						
						System.out.println( add +">" + text);
						
						// Paket auswerten
						if( text.equals( ANMELDUNG ) ) {
							clients.add( add );
							System.out.println( "Anzahl Clients: " + clients.size() );
						} else if( text.equals( ENDE ) ){
							clients.remove( add );
							System.out.println( "Anzahl Clients: " + clients.size() );
						} else {
							// Versenden von Kopien an alle anderen Clients
							for( int i=0; i<clients.size(); i++ ) {
								InetSocketAddress dest = (InetSocketAddress) clients.get(i);
								if( ! dest.equals( add ) ) {
									paket.setSocketAddress( dest );
									socket.send( paket );
									System.out.println( "Kopie an " + dest );
								}
							}
						}
					} while(ende==false );
					System.exit(0);
				}
				catch( IOException e ) {System.err.println( "Ausnahmefehler: " + e );}
				
		}
	//Funktionen und Klassen#######################################################################################################################
	DatagrammServer(String titel) {
		super(titel);
		class CMeinTastaturAdapter implements KeyListener {
			public void keyPressed(KeyEvent e){System.out.println(e.getKeyCode()+"'"+ KeyEvent.VK_CONTROL);if(e.getKeyCode() == KeyEvent.VK_CONTROL){ende=true;} 			}
			public void keyReleased(KeyEvent e){}
			public void keyTyped(KeyEvent arg0) {}			
		}
		addKeyListener(new CMeinTastaturAdapter());
		System.out.println("Start");
		setLayout(new BorderLayout());
		m_malfläche = new CMeinePanel();	
		add(m_malfläche);				
		setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); 
		setUndecorated(true);	
	}
	
	
	class CMeinePanel extends JPanel {
		public void paintComponent(Graphics g) { }   
		public Dimension getMinimumSize() {return new Dimension(300,300);}
		public Dimension getPreferredSize() {return getMinimumSize();}
	}  
}

Bin mir nicht sicher ob ich die richtige Methode nutze, die Geister spalten sich ja zum teil ziemlich was man alles machen kann und was nicht.
 

Volvagia

Top Contributor
Java:
String servername = "localhost";

Falls das nicht das Problem ist, UDP ist im Vergleich zu TCP unzuverlässig (Keine Verbindung, keine integrierte Empfangsbestätigung für Pakete, keine Sequenznummer usw.) Soll nichts gegen UDP sein, das Fehlen gleicht sich durch Geschwindigkeit aus.

Warum versuchst du es nicht testweiße mit einer TCP-Verbindung? (ServerSocket und Socket)
Wenn du da keine Verbindung aufbauen kannst blockiert sie irgendwas. Musst ja nicht deine Programme umschreiben, zwei kleine, geschätzt 5 Zeilen lange Programmstücke (mit throws über die Main) um miteinander zu verbinden sollte reichen.
 
Zuletzt bearbeitet:

irgendjemand

Top Contributor
man könnte es auch wie folgt machen

1) UDP-MultiCast
dabei sendet der client ein multicast-packet und laufende server antworten darauf ... wie man nun entscheidet zu welchem server man sich verbindet wenn man mehr als einen findet ist dir überlassen

2) lobby
du richtest einen festen "lobby-server" ein dessen adresse sich nicht ändert ...
wenn nun ein "server" gestartet wird meldet dieser sich beim lobby-server ...
ein client fragt nun erst beim lobby-server nach laufenden servern und kann dann nach erhalt der liste entscheiden ..


ich weis ... das klingt jetzt viel nach "zocker-suchti" ... aber das sind zwei einfache möglichkeiten wie ein client auf einem rechner einen server auf einem anderen rechner finden kann ...
man muss das rad ja nich immer neu erfinden
 

Seppel

Bekanntes Mitglied
danke für eure Antworten.
Ein Kumpel der ein Java Chatprogramm geschrieben hat, hat sich mal an meinem probiert und den Fehler gesucht. Er meite auch ich soll mal TCP probieren, konnte aber den Fehler noch nicht finden.

Werde mich mal dort versuchen.
Meld mich wenn ich soweit bin

mfg
 

Seppel

Bekanntes Mitglied
Also, habe versucht das ganze umzuschreiben, aber irgend wo war dann doch ein Fehler den ich nicht finden konnte. Habe deshalb (find ig selber schwach) damit es schnell geht copy und paste angewendet und den Server und den client von dieser Siete genommen:
Java Standard: Socket ServerSocket (java.net) UDP und TCP IP ? Wikibooks, Sammlung freier Lehr-, Sach- und Fachbücher

Ich habe beim Client die IP von dem 1. rechner eingegeben und beim zweiten gestartet, nach dem der server auf dem ersten bereits lief. Und wieder Timeout beim verbinden.

Auf einem und dem selben Rechner ging es. Also an was könnte es liegen?
Virenschutzprogramm auf beiden rechner waren down.

Wo könnte jetzt das Problem liegen?
 

irgendjemand

Top Contributor
hmm ... kann ich mir erlich gesagt eher weniger erklären ... hatte noch nie probleme damit eigene server/client programme sogar übers internet zum laufen zu bekommen *hab sogar schon erfolgreich UDP Hole Punching implementiert* ...
würde sagen das es noch andere netz-spezifische probleme gibt ..

btw : ein "AntiVirus" hat NICHTS mit netzwerktraffic zu tun ... dafür ist eine sog. "FireWall" zuständig ... ggf diese mal runterfahren ...
 

Volvagia

Top Contributor
Bin der selben Meinung, Windows-Firewall nicht vergessen. Die blockt gerne, vor allem bei unterschiedlichen Windows-Versionen. Falls er allgemein nicht durchkommt, z. B. falsche IP oder Server offline fliegt dir eine "Connection refused: Connect"-SocketException und kein Timeout. (Java 6)

btw. Client: new Socket(host, port), Server: ss = new ServerSocket(port);, Schleife, ss.accept(), Ausgabe über Clientenverbindung. Da musst du keinen Kilometerlangen Source kopieren. ^^
 

Seppel

Bekanntes Mitglied
antiviren programm ist die Firewall zugleich...
windows firewall könnte bei dem einen rechner wirklich noch on sein muss ich mal morgen noch mal testen

timeout weil er ja automatisch nach einer weile aufhört wenn er keine Verbindung zustande bekommt
 

irgendjemand

Top Contributor
gut ... dann nennt man sowas in der regel "security suite" oder ähnlich ... aber wenn du hier nur das wort "AntiVirus" in den raum wirfst woher sollen wir dann wissen das du damit ein komplexes produkt mit FireWall meinst ?

das ist so ein bisschen wie "ich werf mal ne bock wust in ne halle" ... dann weis auch keiner ob die wurst schon im brot liegt oder noch nich ...

back to topic

win-firewall wird in der regel von solchen produkten beim setup stillgelegt ... ein deaktivieren der software-firewall hat in der regel nicht zur folge das dadurch die win-firewall wieder anspringen würde ... das wird meist erst bei der deinstallation wieder "gerade gebogen" ...

auch gibt es unterschiede zwischen "er kann nicht verbinden und hört irgendwann auf es zu versuchen" und einem "timeout"

genauer stacktrace wäre mal hilfreich ...
 

Seppel

Bekanntes Mitglied
gut ... dann nennt man sowas in der regel "security suite" oder ähnlich ... aber wenn du hier nur das wort "AntiVirus" in den raum wirfst woher sollen wir dann wissen das du damit ein komplexes produkt mit FireWall meinst ?

das ist so ein bisschen wie "ich werf mal ne bock wust in ne halle" ... dann weis auch keiner ob die wurst schon im brot liegt oder noch nich ...

pardon darüber hatt ich ne nachgedacht

win-firewall wird in der regel von solchen produkten beim setup stillgelegt ... ein deaktivieren der software-firewall hat in der regel nicht zur folge das dadurch die win-firewall wieder anspringen würde ... das wird meist erst bei der deinstallation wieder "gerade gebogen" ...

habe noch mal nachgeschaut bei meinem zweiten Rechner ist diese auch win-firewall down. In der Regel hast du recht, wollte mal auf nummer sicher gehen

Java:
java.net.ConnectException: Connection timed out: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connect(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 Client.test(Client.java:16)
	at Client.main(Client.java:8)
 

irgendjemand

Top Contributor
hmm ... dem stack nach zu urteilen würde ich sogar behaupten das es nicht daran liegt das du auf deinem ziel-rechner nicht "reinkommst" ... sondern von deinem quell-rechner aus gar nicht "rauskommst" ... also das java scheinbar nicht die rechte hat überhaupt eine verbindung nach außen aufzubauen ...

denn wenn du beim ziel-rechner nicht "reinkommen" würdest ... müsste eigentlich ein "Connection refused" fliegen ... da aber "timed out" kommt liegt es nahe das der stream überhaupt nicht bis zur *deaktivierten* firewall des hosts durchkommt ...

da wird es dir auch nicht helfen wenn ich dir jetzt ein einfaches sample poste ... da es halt das selbe problem wäre ...


btw : habe den verlinkten code mal gecheckt ... bei mir funktioniert es ... und das sogar über 3 router mit hardware-firewall *entsprechenden port halt geöffnet* und auf beiden systemen mit aktiver software-firewall ... biede mit Java7update4 ...
am code liegts also nich ...


ist halt immer schwer bei sowas "remote" zu helfen wenn man den genauen aufbau des netzes und der systeme nich kennt ... da kann man nur raten und hoffentlich helfende posts abgeben ... aber wenns nicht funktioniert dann gehts halt nich ... da können wir noch so "tipps geben" ... wenn sich dein netz weigert können wir da ja leider auch nichts machen
 

Seppel

Bekanntes Mitglied
du schriebst java hat keien Rechte, gibt es ne möglichkeit diese zu geben?

ich denke mal es liegt am Router, mit dieser Easyox von Vodafon haben wir schon genug ärger.
Oder kann es auch am Client-PC liegen?

Wie kann es sein das Netzwerkspiele funktioniern, aber soetwas geblockt wird?
 

steffomio

Mitglied
UDP sollte man nur nehmen, wenn es egal ist, ob die Daten fehlerhaft oder gar nicht ankommen. Wie z.B. bei Musik und Video Streams. Vorrausgesetzt, dass der Empfänger mit Datenmüll entsprechend umgehen kann.

Also UDP ist pur auf Quantität ausgelegt. Qualität ist da egal.
 

irgendjemand

Top Contributor
@steffomio
1) es gibt einen EDIT-button ... und dieser funktioniert auch noch 7 minuten nach dem posten ...

2) hör bitte auf die threads hier mit "apache mina" zu spammen ... es mag sein das es gewisse anwendungsfälle dafür gibt ... es ist aber kein all-heil-mittel

3) das man UDP nur verwenden sollte wenn es egal ist ob die daten ankommen und wenn ja in welcher reihenfolge hatte wurde bereits genannt ...
 

Seppel

Bekanntes Mitglied
Also ich werde noch mal das Programm in einem anderen Netzwerk testen, da unser Gatway bzw Router ne schwere Macke hat.
Zu meinem letzten Post, jemand ne Idee?
 

steffomio

Mitglied
Connection timed out heißt eigentlich, dass der Rechner nicht gefunden wurde. Sei es dass der Hostname nicht stimmt oder der Port blockiert wird.

Kannst du den Rechner denn anpingen oder sonstwie erreichen über das Windows Netzwerk?

Ich hatte auch mal einen alten Router vor der Nase, der die Rechnernamen nur nach Lust und Laune aufgelöst hat. Im Zweifelsfall hat dann nur noch die IP des Rechners funktioniert. Sowas wie \\der-recher ging bei "Schlechtwetter" oft nicht.
 

Seppel

Bekanntes Mitglied
also irgend wi eist mein letzte post weg...

anpingen geht und ich habe die ip genutzt

string ip="......";
java.net.Socket socket=new java.net.Socket(ip,port);

(Nur abgetippt)

Ich habe es mal im Uni Netz getestet und es geht, werde mal mir einen neuen WLan Stick kaufen, da der scheinbar störungen hat, aber an dem wirds woll ne liegen. Jetzt kann es eigentlich nur noch and der Firewall des router liegen, oder gibt e noch andere Ideen?
 

steffomio

Mitglied
Beim Router, der direkt am WWW sitzt würde ich die Firewall anlassen. Beim inneren Router aus machen. Überhaupt, wenn nur die Family dran sitzt, alle lan Firewalls off. Stört nur.
Zum testen kann man ja mal was zuschalten, wenn das gemecker der anderen nicht zu groß ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Programm unter anderer IP ausführen Netzwerkprogrammierung 6
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
I Problem bei Outputstreamerzeugung in anderer Klasse als Socket Netzwerkprogrammierung 5
Eigenen Rechner als Server? Netzwerkprogrammierung 16
M Socket Hole Punching auf Rechner mit mobilem Zugang Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
A Server auf eigenem Rechner Netzwerkprogrammierung 14
J Erster Server-Client läuft auf lokalem Rechner problemlos. Zwei Rechner über das Internet nicht Netzwerkprogrammierung 8
S XAMPP auf anderem Rechner erreichen Netzwerkprogrammierung 6
M Subnetz-Rechner Netzwerkprogrammierung 2
A java im netzwerk anderen rechner runterfahren Netzwerkprogrammierung 3
c_sidi90 Alle Rechner im Netzwerk ermitteln Netzwerkprogrammierung 17
V Verbindung zweier Rechner über das Internet mit Sockets Netzwerkprogrammierung 8
M RMI auf lokalem Rechner Netzwerkprogrammierung 12
K Getrennte Rechner für RMI-Server/RMI-Registry, bzw. Alternativen? Netzwerkprogrammierung 5
J Mit Java Anwendung ein (externes) Programm auf einem AIX Rechner starten Netzwerkprogrammierung 6
D Client-Rechner stürzt ab - was dann? Netzwerkprogrammierung 2
S welche Rechner sind im lokalen Netz online Netzwerkprogrammierung 11
T Andere Rechner im Netz finden Netzwerkprogrammierung 21
M Rechner einer Domäne auslesen? Netzwerkprogrammierung 3
D Multicast geht nur auf einem Rechner Netzwerkprogrammierung 9
J Kopieren von entfernten Rechner Teil 2 Netzwerkprogrammierung 11
J Kopieren von entfernten Rechner Netzwerkprogrammierung 5
A Broadcast - senden eines Packetes an alle rechner im netz Netzwerkprogrammierung 15
D Zugriff auf Rechner im Lan Netzwerkprogrammierung 2
A Bei FTP Übertragung wird Datei nicht komplett übertragen Netzwerkprogrammierung 2
OnDemand JMS Messages wird gecached Netzwerkprogrammierung 2
P RMI stub wird nicht gefunden Netzwerkprogrammierung 8
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
M com.google.gson wird nicht erkannt Netzwerkprogrammierung 2
F Website parsen, die mit javascript zusammengebaut wird Netzwerkprogrammierung 1
P Socket Server übertragung wird immer langsamer Netzwerkprogrammierung 4
A Socket Socket-Problem - Object wird nicht übertragen Netzwerkprogrammierung 3
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
L Server anpingen (Pingzeit) ?? Pingzeit wird nicht verändert Netzwerkprogrammierung 6
M JSP wird im gesamten Projekt nicht neugeladen Netzwerkprogrammierung 3
K Socket InputStream wird nicht erzeugt Netzwerkprogrammierung 4
R Socket SSL-Connect in Servlet - keystore wird nicht gefunden Netzwerkprogrammierung 2
M Problem Client - Server Sockets: .ready() wird nie true! Netzwerkprogrammierung 6
X Änderung des Objekts wird nicht serialisiert Netzwerkprogrammierung 9
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
F getSource Methode wird als Bot erkannt Netzwerkprogrammierung 8
Dit_ RMI setSoTimeout wird ignoriert? Netzwerkprogrammierung 3
lumo String[] wird zu null bei Serialisierung Netzwerkprogrammierung 8
J method = PUT, aber ausgeführt wird doGet...? Netzwerkprogrammierung 4
K Was wird genau per Telnet verschickt ? Netzwerkprogrammierung 5
M Dateidownload per FTP wird immer langsamer und bleibt dann stehen Netzwerkprogrammierung 3
J BufferedReader.ready() wird nicht true Netzwerkprogrammierung 10
A Socket BufferedReader.readLine() blockiert bis ein im Socket OutputStream was gesendet wird ... Netzwerkprogrammierung 9
C RMI Klasse wird unter falschem Pfad gesucht Netzwerkprogrammierung 4
B Server-Programm wird durch "read" beendet Netzwerkprogrammierung 8
A Socket Client Server Connection wird aufgebaut aber keine daten geschickt. Netzwerkprogrammierung 5
N Socket Verbindung wird immer verweigert Netzwerkprogrammierung 5
K HTTP-Anfrage an einen Server wird nicht beantwortet Netzwerkprogrammierung 3
M URL Handler wird nicht gefunden Netzwerkprogrammierung 6
L SSL Verbindung aber Server wird erst im Programm festgelegt Netzwerkprogrammierung 4
L Https Verbindung wird aus jar heraus nicht aufgebaut Netzwerkprogrammierung 12
C Download-Fortschritt wird falsch angezeigt. Netzwerkprogrammierung 2
A Quellcode von Homepage wird nicht komplett eingelesen Netzwerkprogrammierung 5
V RMI: code wird einfach übergangen ? Netzwerkprogrammierung 3
A FileChannel+SocketChannel:Datei wird nur teilweise übertrage Netzwerkprogrammierung 4
F Stream wird als Char übertragen. Char -> in String umwand Netzwerkprogrammierung 5
L RMI-Funktion wird lokal ausgeführt Netzwerkprogrammierung 12
A RMI: Wo wird die Methode ausgeführt? Netzwerkprogrammierung 9
P JNDI LDAP-SSL Verbindung, Zertifikat wird nicht angezeigt ? Netzwerkprogrammierung 2
A JavaMail Problem - Nachricht wird nicht versendet ? Netzwerkprogrammierung 9
T finlalize Methode vom Server wird nicht aufgerufen Netzwerkprogrammierung 4
B Socket wird nicht richtig geschlossen Netzwerkprogrammierung 2
K mapSystemException wird geworfen Netzwerkprogrammierung 2
L Attachment wird nicht angezeigt in der Email Netzwerkprogrammierung 3
P RMI - meine Stub-Class wird nicht gefunden Netzwerkprogrammierung 9
G Socket wird nach Portscann geschlossen Netzwerkprogrammierung 2
R Socket wird nicht ausgeführt Netzwerkprogrammierung 6

Ähnliche Java Themen

Neue Themen


Oben