# PC-A sendet, PC-B liest aus



## Hutmacher (16. Jul 2009)

Ich bin vollkommen verzweifelt; habe jetzt schon Tutorials und Bücher zur Netzwerkprogrammierung und zu den Sockets gewälzt, aber ich verstehe es immer noch nicht. 
Mein derzeitgies Übungsprojekt ist Folgendes:
Ich möchte ein Programm schreiben, mit dem ich quasi Daten von einem anderen PC auslesen kann (d.h. was in Directory X drin ist z.B.)
Also würde es ja in den Schritten ablaufen:
1. Ich sende einen Befehl an einen anderen PC
2. Dieser interpretiert den Befehl, und sendet mir seine Daten dann zurück
3. Bei mir wird das nun ausgegeben
4. Jetzt sende ich wieder einen Befehl ... fängt bei 1 wieder an

Nun habe ich aber keinen wirklichen Schimmer, wie ich das anstellen soll. Ich möchte von euch um Himmels Willen (etcpp.) keinen fertigen Code - aber könnte mir jemand vielleicht erklären, was genau ich brauche, um das zu realisieren?

Für jede Hilfe dankbar, Hutmacher


----------



## homer65 (16. Jul 2009)

So sieht bei mir ein Client aus:

[Java]
package client;
import java.net.*;
import java.io.*;
import common.*;
public class ServerRequest
{
	private static Protokol protokol = new SimpleProtokol();
	private static Socket con = null;
	private static OutputStream ou = null;
	private static ObjectOutputStream oo = null;
	private static InputStream in = null;
	private static ObjectInputStream oi = null;
	public static Object get(Object send)
	{
		Object received = null;
		try
		{
			con = new Socket(Parameter.host,Parameter.port);
			ou = con.getOutputStream();
			oo = new ObjectOutputStream(ou);
			oo.writeObject(send);
			oo.flush();
			in = con.getInputStream();
			oi = new ObjectInputStream(in);
			received = oi.readObject();
		}
		catch (Exception e)
		{
			protokol.write("ServerRequest:Exception:" + e.toString());
			System.exit(12);
		}
		return received;
	}
}
[/Java]

Und so der Server:
[Java]
package server;
import java.net.*;
import java.io.*;
import common.*;
public class MainThread extends Thread
{
	private int port = 0;
	private Protokol protokol = new SimpleProtokol();
	ServerSocket sock = null;
	public MainThread(int port)
	{
		this.port = port;
	}
	public void run()
	{
		protokol.write("MainThread:run:gestartet");
		try
		{
				sock = new ServerSocket(port);
				while (Global.runFlag)
				{
					try
					{
						Socket con = sock.accept();
						ArbeitsThread D = new ArbeitsThread(con);
						D.setDaemon(true);
						D.start();
					}
					catch (InterruptedIOException ie)
					{
						//Mache nichts
					}
				}
				sock.close();
		}
		catch (Exception e)
		{
			protokol.write("MainThread:run:Exception:");
			protokol.write(e.toString());
		}
		Global.runFlag = false;
		protokol.write("MainThread:run:beendet");
	}
}
[/Java]


----------



## homer65 (16. Jul 2009)

Und hier auch noch der ArbeitsThread:
[Java]
package server;
import java.io.*;
import java.net.*;
import common.*;
public class ArbeitsThread extends Thread
{
	private static int number = 0;
	public int myNumber = 0;
	private Protokol protokol = new SimpleProtokol();
	public Socket con = null;
	public ArbeitsThread(Socket con)
	{
		this.con = con;
		InetAddress ia = con.getInetAddress();
		String client = ia.getHostAddress();
		myNumber = getNumber();
		protokol.write("ArbeitsThread(" + myNumber + "): Created from " + client);
	}
	public void run()
	{
		protokol.write("ArbeitsThread(" + myNumber + "):run:gestartet");
		InputStream in = null;
		OutputStream out = null;
		ObjectInputStream oi = null;
		ObjectOutputStream oo = null;
		try
		{
			in = con.getInputStream();
			oi = new ObjectInputStream(in);
			Object obj = oi.readObject();
			Verarbeitung V = new Verarbeitung(obj,this);
			Object obk = V.start();
			out = con.getOutputStream();
			oo = new ObjectOutputStream(out);
			oo.writeObject(obk);
			oo.flush();
		}
		catch (Exception e)
		{
			protokol.write("ArbeitsThread(" + myNumber + "):Exception:" + e.toString());
		}
		protokol.write("ArbeitsThread(" + myNumber + "):run:beendet");
	}
	public synchronized int getNumber()
	{
		number++;
		return number;
	}
}


[/Java]


----------



## Hutmacher (16. Jul 2009)

Irgendwie hilft mir das auch nicht weiter ...

Bei diesen Server-Dingen habe ich immer noch Unklarheiten. Ich versuche, auf Port 5464 eine Verbindung herzustellen; die einzige Webseite/der einzige Server, den ich habe, ist mein FTP-Server. Aber wenn ich ich einen Socket initialisiere (Socket socket = new Socket("http://meinftp.bplaced.net/", 5464); [der FTP heißt natürlich nicht "meinftp"]), bekomme ich schon eine UnknownHostException.


----------



## babuschka (16. Jul 2009)

Ich habe jetzt nicht so viel Ahnung von Netzwerkprogrammierung, aber mir ist aufgefallen, dass Du deinen BPlaced-FTP-Server über http://meinftp.bplaced.net/ aufrufst. Da FTP das FTP-Protokoll benutzt sollte es doch eher ftp://meinftp.bplaced.net/ heißen, oder?  Zumindest kann ich so meinen FTP-Account bei BPlaced über den Browser erreichen.


----------



## Hutmacher (16. Jul 2009)

JohnMcLane hat gesagt.:


> Ich habe jetzt nicht so viel Ahnung von Netzwerkprogrammierung, aber mir ist aufgefallen, dass Du deinen BPlaced-FTP-Server über http://meinftp.bplaced.net/ aufrufst. Da FTP das FTP-Protokoll benutzt sollte es doch eher ftp://meinftp.bplaced.net/ heißen, oder?  Zumindest kann ich so meinen FTP-Account bei BPlaced über den Browser erreichen.


Ja, das stimmt schon. Aber man kann auch auf die Daten des FTPs zugreifen, ohne sich einloggen zu müssen. 
Wenn du dich einloggst, hast du ja allmögliche Berechtigungen und kannst Daten löschen, verschieben und so weiter (mit FileZilla, im Win-Explorer, ...). Wenn du allerdings anstatt von "ftp://" nun "htpp://" schreibst, kannst du das nicht. Das ist auch ganz praktisch, denn nehmen wir an, du willst jemandem eine Datei von deinem FTP verlinken, sodass er sie downloaden kann. Dann sähe dein Link so aus: *ftp://username:passwort@meinftp.bplaced.net/file.txt/*.
Somit würdest du dem User direkt deine Accountdaten verraten!
Anders sähe dein Link so aus: *http://meinftp.bplaced.net/file.txt/* und er könnte die Daten nur downloaden.


----------



## HoaX (17. Jul 2009)

http:// bzw ftp:// gibt das protokoll an, das ist hier aber unnütz, wir befinden uns noch eine ebene darunter. verwende einfach "meinftp.blaced.net"


----------



## Hutmacher (17. Jul 2009)

Gut, wenn ich das versuche, bekomme ich eine ConnectException:
*java.net.ConnectException: Connection refused: connect*

Dieser Code eröffnet eine Verbindung zu meintftp.bplaced.net und schreibt auf diesem Server etwas (z.B. test, jenachdem, was man halt als Arg übergibt).

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

class Write
{
	public static void main(String[] args)
	{
		try
        {	
			Socket socket = new Socket("applets.bplaced.net", 5659);
			OutputStream out = socket.getOutputStream();

			out.write(args[0].getBytes());
			out.close();
		}
                catch (Exception ex)
		{ System.out.print(ex.toString()); }
	}
}
```

Hat es etwas mit dem Port zu tun?


----------



## HoaX (17. Jul 2009)

Kann gut sein, da muss natürlich ein Server auf dem Port lauschen, wie soll es sonst funktionieren ...


----------



## Hutmacher (17. Jul 2009)

Deswegen habe ich ja auch geschrieben Nun habe ich aber keinen wirklichen Schimmer, wie ich das anstellen soll. Ich möchte von euch um Himmels Willen (etcpp.) keinen fertigen Code - aber könnte mir jemand vielleicht erklären, was genau ich brauche, um das zu realisieren?" 

Ich habe das iinsgesamt so verstanden, als müsse ich nur einen Socket quasi an einem Server (also meintftp.bplaced.net) anheften und schon könnts losgehn ...


----------



## Ebenius (17. Jul 2009)

:rtfm: Wenn Du der englischen Sprache mächtig bist; [post=503920]hier[/post] hab ich mal auf ein Tutorial hingewiesen welches ich halbwegs verständlich finde. Auch die Wikipedia weiß zum Thema Socket ein bisschen was.

Ebenius


----------



## Hutmacher (23. Jul 2009)

Ah, danke Ebenius, das hat weitergeholfen. 
Eine Frage hab ich jetzt aber immer noch:

In dem Tut stand nur, wie ich das Ganze mit Localhost (127.0.0.1) bewältige. Würde ich den Server jetzt bei einem User registrieren, müsste ich ja seine IP kennen. Da ich die aber nich kenne und sich der User immer ändern kann, muss ich es ja irgednwo im Netz festigen.
 Um das jetzt auf "meinftp.bplaced.net" ablaufen lassen zu können, muss ich (schätze ich jetzt mal) also nur noch die bind-Methode am Server (-Socket) aufrufen?


----------



## Ebenius (23. Jul 2009)

Okay, jetzt hab ich das Thema nochmal von oben überflogen. Du hast einen FTP-Server der im Internet über einen Hostnamen erreichbar ist. Du möchtest mit diesem Server von einem/mehreren Clients aus reden können.

Was bedeutet "Würde ich den Server jetzt bei einem User registrieren, müsste ich ja seine IP kennen."? Du musst Dich auf den Host "meinftp.bplaced.net" verbinden, richtig. Den Port legt der Server fest.

Willst Du tatsächlich die FTP-Implementierung selbst übernehmen? Dann solltest Du wissen, wie FTP funktioniert. FTP benötigt in jedem Fall zwei Verbindungen. Eine für FTP-Control (da gehen die Befehle rüber; Standard ist Port 21) und einen für FTP-Data (da gehen die Dateien, Verzeichnisnamen, etc. rüber). FTP kennt zwei Modi; _active_ (das ist der Standard, wird von jedem FTP-Server unterstützt) benötigt noch eine dritte Verbindung; in umgekehrter Richtung. Dabei macht der FTP-Server eine Verbindung zum Client auf und überträgt über diese Verbindung die Daten an den Client. Der andere Modus -- _passive_ -- kommt ohne diese dritte Verbindung aus, wird inzwischen auch von de facto allen Servern unterstützt und hat den Vorteil, dass die Verbindungen nur in einer Richtung aufgebaut werden müssen. Das ist bei den Themen Firewall oder NAT beispielsweise wichtig.

Informationen findest Du -- zum Anfangen -- unter dem Schlagwort FTP in der wikipedia. Von dort aus sollte auch auf die entsprechenden RFCs verwiesen werden. Viel Erfolg.

Wenn Du Dir die ganze Arbeit sparen willst, such doch einfach nach fertigen FTP-Client-Implementierungen in Java. Die gibt's, hab ich auch schon in diesem Forum gesehen, suchen musst Du trotzdem selber.

Wenn bei meiner Erklärung irgendwas nicht ganz richtig ist; ich bin auch nicht der Netzwerker vorm Herrn. ;-)

Ebenius


----------



## Hutmacher (23. Jul 2009)

Da hab ich mich wohl im falschen Post falsch ausgedrückt ... ich hätte lieber "meinserver.bplaced.net" schreiben sollen ... tut mir echt leid^^' Trotzdem interessant zu wissen, danke.

Mit der IP meinte ich:
Eigentlich verbinde ich mich ja im Tutorial-Code mit mir selbst - also mit der IP 127.0.0.1 . Würde ich jetzt bei einem andern User den Server starten lassen, und beim Verbinden kann ich dann ja nicht mehr localhost (127.0.0.1) eingeben, sondern muss dann ja seine IP haben.

Okay, das heißt also, wenn ich die bind-Methode vom ServerSocket auf "meinserver.bplaced.net" aufrufe, nimmt er automatisch den Port, den der ServerSocket hat? Also

```
ServerSocket sevsock = new ServerSocket(4567);
sevsock.bind("meinserver.bplaced.net");
//Jetzt läuft auf "meinserver.bplaced.net" auf Port 4567 der Server (-Socket)
```

Irgendwo anders habe ich heute aber schon gelesen, dass es anders wäre ... finde aber gerade den Link nicht, habe vorhin mal wieder meine FF-Chropnik gelöscht =/


----------



## Ebenius (23. Jul 2009)

Achso, ne... Du machst auf dem *Server* einen ServerSocket auf und wartest auf eine Anfrage. In etwa so sieht das meist aus 
	
	
	
	





```
final ServerSocket servSocket = new ServerSocket(666);
while (true) {
  final Socket sock = servSocket.accept(); // waits for a client to connect
  // now a client connected to us; do whatever needs to be done
}
```
Der Client muss den Server Host und Port kennen. Das sieht dann meist so aus: 
	
	
	
	





```
final Socket socket = new Socket("meinserver. bplaced.net", 666);
// now you are connected with the server, work with the socket now
```

[c]Socket.bind()[/c] muss man normaler Weise gar nicht aufrufen.

Ebenius


----------



## Hutmacher (23. Jul 2009)

Aber dann habe ich ja nur einen ServerSocket, der auf Port 666 IRGENDWO rumschwirrt.
Und der Client-Socket will sich mit "meinserver.bplaced.net" auf Port 666 verbinden.

Wieso kann das denn funktionieren? Der ServerSocket weiß doch gar nichts von "meinserver.bplaced.net" ... 

Und wo starte ich überhaupt den ServerSocket? [Also den kleinen Server, der auf "meinserver.bplaced.net" laufen soll]

PS: 666


----------



## sparrow (23. Jul 2009)

Hutmacher hat gesagt.:


> Wieso kann das denn funktionieren? Der ServerSocket weiß doch gar nichts von "meinserver.bplaced.net" ... 666



Domain Name System ? Wikipedia


----------



## tuxedo (23. Jul 2009)

@Sparrow

Damit kann der CLient was anfangen. Dem Server ist der DNS egal

@Hutmacher:

Wenn man auf Serverseite keinen Host angibt, sondern nur den Port, dann bindet sich der Server auf alle erreichbaren Netzwerkinterfaces und bietet dort überall den Dienst an. Also auf 127.0.0.1 und auf all seinen Netzwerkkarten.

- Alex


----------



## Ebenius (23. Jul 2009)

Hutmacher hat gesagt.:


> Aber dann habe ich ja nur einen ServerSocket, der auf Port 666 IRGENDWO rumschwirrt.



Wieso irgendwo? Dein Server läuft auf einem Rechner der im Internet über den Hostnamen "meinserver.bplaced.net" erreichbar ist, oder? Der Client wird seinen DNS fragen, welche IP der Server hat und -- sofern der Server tatsächlich im Internet unter dem Namen existiert -- die IP zurückgeliefert bekommen und sich dann zu dieser verbinden.

Ein richtig gutes Beispiel habe ich nicht, daher erfinde ich ein schlechtes. Wir kommunizieren mit Brieftauben zwischen Häusern. Stell Dir eine Stadt mit vielen Häusern vor. Jedes Haus hat eine Adresse. Jede Person ist ein Programm oder Teil eines Programmes. Eine Brieftaube ist ein fliegender Vogel.

Eines der Häuser ist Dein Server, ein anderes Haus ist der Client. Wenn jemand aus dem  Client-Haus eine Frage an jemandem aus dem Server-Haus stellen möchte, schickt er eine Brieftaube hin. Dazu muss er das Server-Haus kennen, also entweder dessen Nummer oder die Adresse.

Eine Brieftaube kann aber schlecht zu einem Haus fliegen, die Klingelschilder lesen und selber herausfinden, welche Person die Nachricht bekommen soll. Eine Brieftaube kann immer nur zu einem bestimmten Fenster eines bestimmten Hauses fliegen. Deswegen hat jedes Haus durchnumerierte Fenster.

Wenn ein Sender eine Taube verschickt, legt er zuerst eine Schachtel an und beschriftet diese mit Adresse und Fensternummer des Empfängers. Die selben Daten teilt er der Taube mit, damit diese weiß, wohin sie fliegen muss. Außerdem stattet er die Taube mit einer Nachricht und seinem eigenen Absender aus, ebenfalls bestehend aus Adresse und Fensternummer. Und dann schickt er die Taube auf die Reise, lässt sein Fenster offen und die Schachtel bestehen.

Allerdings sind Fenster eines Hauses natürlich normaler Weise verschlossen. Es bringt also nichts, eine Taube zu einem verschlossenen Fenster im Server-Haus fliegen zu lassen. Sie wird zurückkehren und ganz aufgeregt gurren. Ein Empfänger im Server-Haus der also Nachrichten erwartet, muss dafür sorgen, dass ein Fenster offen ist und beobachtet wird. Ein geschlossenes Fenster gehört niemandem, jedes offene genau einem Empfänger im Haus. Wenn jemand also Nachrichten erwartet, schickt er einen Taubenpostsortierer, der das ihm genannte Fenster öffnet und wartet. Es kann pro geöffnetem Fenster nie mehr als einen Taubenpostsortierer geben.

Der Empfänger teilt dem Taubenpostsortierer, dass dieser auf das Erscheinen von Tauben warten soll. Wenn eine Taube an seinem Fenster erscheint, nimmt er eine neue Postschachtel, liest Adresse und Fensternummer des Senders aus der Nachricht der Taube und beschriftet damit die Schachtel. Die Taube setzt er in die Schachtel und übergibt diese dem Empfänger. Typisch Personal: Nachdem er das getan hat, muss man ihm sagen, dass er wieder auf das Erscheinen neuer Tauben warten soll.

Ein Empfänger kann mehrere Postschachteln erhalten, je eine pro Sender. Jede Taube des selben Senders fliegt von da an selbständig zu Ihrer Schachtel. Der Empfänger entnimmt der Postschachtel Tauben und liest deren Nachrichten. Wenn er eine Nachricht zurücksenden möchte klammert er seine neue Nachricht an eine neue Taube und setzt diese in die Postschachtel. Zum Glück können die Tauben lesen, erkennen anhand der Schachtel, wohin sie fliegen müssen, bewegen sich zum Client-Haus und setzen sich dort in Ihre Schachtel und warten.

Sowohl der Empfänger als auch der Sender können die Kommunkation beenden, indem sie dies dem jeweils anderen mitteilen. Beide entfernen die Beschriftung auf der Postschachtel und stellen diese zurück ins Lager. Der Empfänger im Server-Haus kann natürlich auch jeder Zeit das Fenster wieder schließen. Dabei werden alle Postschachteln hinter diesem Fenster wieder freigegeben und der Taubenpostsortierer entlassen.

Zurückübertragen:

Ein Haus ist ein Computer
Die Adresse eines Hauses ist eine IP eines Computers, ggf. auch der Name der per DNS dann zur IP gewandelt wird
Ein Fenster ist ein Port
Eine Taube ist eine beliebige Netzwerkkommunikation (in welcher Form auch immer)
Ein Taubenpostsortierer ist ein [c]ServerSocket[/c]
Eine Postschachtel ist ein [c]Socket[/c]
Das Warten des Taubenpostsortierers passiert bei [c]accept()[/c]
Die Postschachtel wird angelegt, bevor der Aufruf zu [c]accept()[/c] aufhört

Ich lasse mich gern korrigieren, falls ich irgendwas suboptimal oder falsch erklärt habe.

Ebenius


----------



## tuxedo (23. Jul 2009)

@Ebenius: Ich glaube du verwirrst unseren Hutmacher nur mehr..

Sein Problem war offensichtlich, dass er nicht weiß wie der Server sich verhält wenn man ihm sagt: Hier, mach Fenster 666 auf und lausche da. Denn der Server hat i.d.R. mehr als nur eine IP. Einmal die Localhost, und einmal die Netzwerkkarte. Sind mehrere Karten drin gibts weitere IPs.

Gibt man keine eximpizite Bind-Address beim Server an, bindet er sich auf alles was da ist. Sollte aber auch in der JavaDoc stehen..

- Alex


----------



## Ebenius (23. Jul 2009)

Tuxedo, so hab ich die Frage nicht gelesen. Aber wenn das der Fall ist, dann hast Du natürlich recht.

Ebenius


----------



## tuxedo (23. Jul 2009)

Vllt. hab ich mich ja auch verlesen, aber das scheint das naheliegenste zu sein. Vor allem da gesagt wurde dass man bind nicht braucht und auch keinen Hostnamen/IP angeben muss...

- Alex


----------



## Hutmacher (23. Jul 2009)

Danke für die ganzen Bemühungen ... =) Echt nett von euch.

Es scheint bei mir aber nicht zu auf meinserver.bplaced.net zu funktionieren. Wenn ich es nur auf localhost benutze, funktioniert es einwandfrei. 
Server:

```
ServerSocket server = new ServerSocket(37474); //Startet einen Server auf Port 37474
while (true)
{
    Socket client = server.accept();
     ......
}
```
[der Rest ist so implementiert, dass der Server einen String ausliest und zurückgibt, hier unwichtig]

Client:

```
Socket server = new Socket("meinserver.bplaced.net", 37474); //Stellt eine Verbindung zum Server her
```

Ich rufe beide Programme (in separaten DOS-Boxen) auf meinem PC auf und es funktioniert nicht.

*Irgendwie muss ich den Server doch auf "meinserver.bplaced.net" starten. Aber wie?*


----------



## Ebenius (24. Jul 2009)

Ich schrieb jetzt in zwei Beiträgen oben, dass dazu Dein Rechner unter dem Domainnamen im Netz erreichbar sein muss. Thema DNS. Mach Dich mal schlau.

Ebenius


----------



## tuxedo (24. Jul 2009)

Hinzu kommt noch:

Wenn hinter dem Hostnamen eine nicht-Lokale-IP steckt (also z.B. keine 192.168.x.x sondern die, die dir dein Provider beim einwählen gegeben hat (meist via DHCP)), dann geht die Verbindung erstmal "raus ins Internet" und von da wieder "rein". Wenn der Server also daheim hinter einem Router steht, muss dort Portforwarding eingerichtet sein. Sonst weiß der Router nicht welchem Rechner er die Daten schicken muss.

Ich denke, und das solltest du bitte nicht überlesen, du solltest mal ausführlich deine Netzwerkkonstellation schildern. Bisher wissen wir nicht (oder ich habs überlesen) welche Rechner involviert sind und wie die Hostnamen zu diesen Rechnern passen.

Hier mal ein Beispiel von meinem "Server":

Ich habe daheim hinter meiner Fritzbox ein 192.168.0.x Netzwerk.

Mein "Server" hat intern die IP 192.168.0.100
Ein anderen Rechner, welchen ich als Testclient benutze, hat 192.168.0.101

Der Server bindet sich, da ich keine IP und keinen Host in Java angegeben habe, an alle IP-Adressen die ihm zur Verfügung stehen auf Port 6666. Also 127.0.0.1 für localhostverbindungen, u nd 192.168.0.100.

Ich hab zusätzlich noch einen Hostnamen bei dyndns.com registriert. Dieser lautet z.B. meinserver.dyndns.com. Dieser Hostname ist mit der T-Online-IP 91.x.x.x verknüpft die ich beim Einwählen ins Internet mit der Fritzbox bekommen habe. 

So. Mein Testclient soll sich also mit meinserver.dyndns.com auf Port 6666 verbinden. Das tut er auch. Intern wird der Name also zu 91.x.x.x aufgelöst. Der Verbindungsaufbau geht also vom Internen Netzwerk, raus über die Fritzbox ins Internet und wieder zurück zur Fritzbox, die die 91.x.x.x IP besitzt. 

Die Verbindung soll aber zu meinem Server gelangen. Dieser hat aber die IP 192.168.0.100 ... Die Fritzbox steht jetzt da wie der Ochs vorm Berg und weiß nicht an welchen Rechner die Daten gehen sollen. Schließlich weiß sie nur: Da kommt irgend jemand und will auf 91.x.x.x Port 6666 benutzen... 

Und hier kommt das Port-Forwarding ins Spiel: In der Fritzbox kann man einstellen, dass alle Verbindungen, welche an Port 6666 gehen, intern weitergeleitet werden zu einem speziellen Rechner. In konfiguriere also dass alle aus dem Internet eingehenden Anfragen an Port 6666 TCP intern auf 192.168.0.100 weitergeleitet werden.

Und siehe da: Der Verbindungsaufbau klappt.

Jetzt bist du dran: Wie ist das bei dir? Welcher Rechner ist mit welchem Gerät verbunden und hat welche IP? Zu welcher IP wird dein Hostname aufgelöst?

- Alex

P.S. Wenn du nicht gerade Serverinhaber von bplaced.net bist: Das ist ein Webhosting-Dienst. Einen Java-Server kannst du da nicht laufen lassen ...


----------



## Hutmacher (24. Jul 2009)

Danke, mit soetwas hatte ich nicht gerechnet.

Wenn ich den Beitrag also recht verstehe, sieht die ganze Konstellation im Gesamten so aus:






 (?)

Anyway - danke! Es funktioniert jetzt endlich!
Von  mir aus und von anderen PCs aus.
Habe mich bei dnydns.com registert und mir einen Hostnamen für die (dynamische) Router-IP zugelegt. Dann habe ich den Speedport im Konfigurationsmenü geforwarded, d.h. eine Port-Regel auf meinen PC leitend erstellt.
Dann Server gestartet ud Client woanders, schwupps - alles ging!
Danke nochmal, für die irre langen Beiträge und die Hilfe 

PS: @Ebenius & Tuxedo:
Ihr solltet eure Beiträge mal zusammenfassen, etwas verallgemeinern und dann die FAQ schreiben. Sowas fehlt da noch.


----------



## Ebenius (24. Jul 2009)

Hutmacher, alle Achtung. Am Anfang hast Du irgendwie keine Ahnung von Netzwerken gehabt und inzwischen legst Du schon N/W-Routen. 

Ebenius


----------



## Hutmacher (25. Jul 2009)

Und wieder Probleme ... ich habe jetzt einmal versucht, den Test-Client mit dem Test-Server kommunizieren zu lassen, also das, was gestern problemlos ablief. Ich kassierte nur TimeOuts. 
Also habe ich mir gedacht, es müsste doch etwas mit dem Host zu tun haben, dass der irgendwie die Router-IP nicht richtig aktualisiert - und siehe da, es war genau so.

Wenn ich mich bei DynDNS einlogge und auf meinen Host gucke, steht dort
"Zuletzt aktualisiert: Jul. 24, 2009 11:33 AM" und meine Router-IP von gestern. Dabei habe ich doch beim Erstellen eingestellt, dass die IP dynamisch ist.

Was muss ich denn jetzt tun, damit ich das wieder in den Griff bekomme? Beim Googlen komme ich immer nur soweit, dass ich mir dann irgendwelche anderen Clients noch zusätzlich einbauen muss oder soll, aber das kann es doch auch nicht sein (bzw. ich dachte, dass das ein Speedport W900 von alleine könnte <.<)... oder?!:autsch:


----------



## sparrow (25. Jul 2009)

Bei vielen Routern kann man das direkt in deren "Oberfläche" angeben. Dann sorgt der Router bei jeder Einwahl dafür, dass dynDNS (oder ein ähnlicher Dienst) entsprechend aktualisierte Daten bekommt.


----------



## Hutmacher (25. Jul 2009)

Ah, danke. Habe es eben schon per Zufall bei "Dynamischer DNS" rausgefunden ^^'

Klappte aber nicht, weil ich höchstens "DynDNS.org" anwählen konnte und dann einen passenden Hostname angeben sollte. Mein Hostname war "meinserver.scrapping.cc" dort, und als ich das mit richtigem User und PW eingegeben habe, hat es nicht geklappt.
Jetzt habe ich mir einen neuen Server eingerichtet und ihn bei der Dynamischen DNS eingegeben - noch klappt es, werde mal gucken, wie es nachher/morgen aussieht ...


----------



## sparrow (25. Jul 2009)

Du kannst es ganz einfach testen: einmal neu ins Internet einwählen gibt eine neue IP.


----------



## Ebenius (26. Jul 2009)

sparrow hat gesagt.:


> Du kannst es ganz einfach testen: einmal neu ins Internet einwählen gibt eine neue IP.


Kommt immer auf den Anbieter an. Ich bekomme zum Beispiel in der Regel die gleiche, nur manchmal gibt's ne neue.

Ebenius


----------



## sparrow (26. Jul 2009)

Ebenius hat gesagt.:


> Kommt immer auf den Anbieter an. Ich bekomme zum Beispiel in der Regel die gleiche, nur manchmal gibt's ne neue.
> 
> Ebenius



Bei ihm stehen die Chancen ganz gut, dass es eine neue gibt. Gab ja auch eine nach dem 24h Disconnect


----------

