# Mehrere / bestimmte Netzwerkkarten ansteuern



## Einwegdose (16. Nov 2007)

Guten Abend 

Kann mir jemand verraten, ob und wenn ja wie es möglich ist in Java eine bestimmte bzw. mehrere Netzwerkkarten anzusteuern ? An meinem Laptop bin ich jetzt z.B. über Kabel und WLAN zum Router verbunden. Wenn ich nun mein Java-Programm ausführe, welches über Sockets zu einem Server connected, weiss ich ja garnicht welche Verbindung es nutzt. (Leider weiss ich auch nicht mal wie man das in Windows regeln kann  :roll: )
Ich würde also gerne eine Verbindung zu einer bestimmten bzw. zu beiden parallel aufbauen können.

Wenns schon irgendwo hier steht, schonmal Entschuldigung im Vorraus, habe nichts gefunden ^^

Danke im Vorraus  :applaus:


----------



## Guest (16. Nov 2007)

Siehe: NetworkInterface.getNetworkInterfaces()


----------



## Einwegdose (16. Nov 2007)

Danke für die ausführliche Antwort 

Ist ja schonmal ein Anfang die Klasse, aber scheinbar bekomme ich damit ja nur eine Auflistung der Netzwerk-Adapter, wie:


```
Display name: Realtek RTL8101 Family PCI-E Fast Ethernet NIC (NDIS 6.0)
Name: eth2
InetAddress: /..........
InetAddress: /192.168.2.102

Display name: Atheros AR5007EG Wireless Network Adapter
Name: net3
InetAddress: /.................
InetAddress: /192.168.2.101
```


----------



## Guest (17. Nov 2007)

Einwegdose hat gesagt.:
			
		

> ...aber scheinbar bekomme ich damit ja nur eine Auflistung der Netzwerk-Adapter...


Ich dachte, das ist genau das, was du willst.


----------



## Einwegdose (17. Nov 2007)

Naja, das ist wenn dann der erste Schritt.
Ich möchte ja eine bestimmte Netzwerkkarte benutzen:


```
// try-catch Block

Socket soc = new Socket(server, 80);
```

Welche Karte wird denn da benutzt ? Das möchte ich bestimmen bzw steuern können !


----------



## HoaX (18. Nov 2007)

du kannst dich nur an eine ip binden. und selbst dann ist noch nicht gesagt dass auch über die nic mit dieser ip gesendet wird. was über welchen weg wohin kommt ist sache des betriebssystems. schaut dir das (konsolen)programm "route" an.


----------



## Einwegdose (18. Nov 2007)

Hmm ok, danke soweit.
Habe mich nochmal etwas in der Socket-Klasse umgeschaut und bin dann auf den Konstruktor " Socket(String host, int port, InetAddress localAddr, int localPort) " gekommen.


```
soc = new Socket(server, 80
					,InetAddress.getByName("192.168.2.101"),51000);
```

Leider klappt das nicht  Er wirft folgende Exception: 

java.net.BindException: Address already in use: JVM_Bind

Hat jemand eine Idee ob der Ansatz richtig ist !?!


----------



## DocRandom (18. Nov 2007)

Hi!

DieException bedeutet das der Port 51000 schon belegt ist, versuche es demnach mit einem anderen Port!

lg
DocRandom


----------



## Einwegdose (18. Nov 2007)

Habs jetzt hinbekommen, nach einigem googeln und im SUN-Forum suchen ... am Port lag es glaub ich nicht, da ich mehrere probiert hab.


```
//try-catch-Block

soc = new Socket();
bindpoint = new InetSocketAddress(local, 0);
remote = new InetSocketAddress(server, 80);
soc.bind(bindpoint);
soc.connect(remote);			
return soc;
```


----------



## HoaX (18. Nov 2007)

dich bei einer verbindung zu einem server explizit lokal zu binden macht eigentlich nur sinn wenn das protokoll verlangt dass du einen bestimmten port nimmt. nur weil du dich an diese adresse bindest heißt das nicht dass auch zum senden diese ip verwendet wird.


----------



## Einwegdose (18. Nov 2007)

Nunja, ich habe es nun so gelöst, und die Statusfenster der beiden Verbindungen offen gehabt. Je nachdem welches ich gewählt hatte, zeigte Windows auch bei dem passenden Fenster die geflossenen Bytes an. Denke also mal das es so ganz gut klappt.


----------

