# Sockets - Lokalen Port aber nicht IP bestimmen



## feuervogel (19. Jun 2007)

Hallo!

Ich schreibe derzeit an einer P2P-Anwendung.

Dazu sind die Peers Empfänger und Sender zugleich. Ich hätte gerne, dass der Port mit dem A zu B sendet, auch der Port ist, mit dem A auf eingehende Verbindungen von B lauscht, so dass jeder Peer seinen Port selbst bestimmen kann und sich nicht alle auf einen einigen müssen.

Leider finde ich für Socket nur Konstruktoren die, wenn ich den lokalen Port angeben kann, auch die lokale IP-Adresse, mit der gesendet wird, mit angeben muss. Diese finde ich jedoch nur heraus, wenn ich einen Socket ohne diese Informationen erstelle und die mir dann mit getLocalAddress die lokale Netzwerkverbindung geben lasse, die für das Senden aktiv ist.

Ich hab zum Beispiel zwei Netzwerkinterfaces, aber nur eins ist mit dem Internet verbunden und sendet demnach. Natürlich hat das eine auch eine IP-Adresse.

Wie finde ich nun also ohne den Umweg über den zuerst erstellen Socket die InetAddress raus, die fürs Senden verantwortlich ist?

Wenn ich InetAddress.getLocalHost() aufrufe. wird mir die 127.0.0.1 geliefert, die mir nichts bringt...


----------



## HoaX (19. Jun 2007)

erstell einen socket für 0.0.0.0?! dann kannst du von überall verbindungen annehmen. was du mit 


			
				feuervogel hat gesagt.:
			
		

> dass der Port mit dem A zu B sendet, auch der Port ist, mit dem A auf eingehende Verbindungen von B lauscht,


meinst ist mir nicht wirklich klar. wenn A auf port 1234 lauscht und sich B darauf verbindet dann können sie über diese verbindung daten austauschen ...


----------



## feuervogel (20. Jun 2007)

okay, A lauscht auf 1234, b lauscht auf 3333. nun will ich, dass wenn b sich zu a verbindet und daten sendet, b diese daten auch über 3333 sendet...


----------



## kleiner_held (20. Jun 2007)

ungetestet:

```
int localPort = 1234;
int remotePort = 3333;
String remoteHost = "B";
Socket client = new Socket();
client.bind(new InetSocketAddress(localPort));
client.connect(new InetSocketAddress(remoteHost , remotePort ));
```

Ich bin mir nicht sicher, ob man den gleichen Port fuer eine Client-Verbindung heranziehen kann, an dem schon ein eigener Server lauscht. Musst du halt testen.


----------

