2012-07-13 17 views
6

Bir solaris ana bilgisayarında iki arabirim var. Şemada gösterildiği gibi her iki arabirim üzerinden tek bir TCP sunucusuna iki TCP bağlantısı başlatmak istiyorum. Java'da yerel yönlendirme tablosunu geçersiz kılmak için arabirimi TCP soketine bağlamak için herhangi bir seçenek var mı?Java TCP bağlantısında bir arabirime bağ kurma

Ben ağ diyagramı ekliyorum, ben sunucudan veri almak için seri bağlantılar bant genişliği hem kullanmak istiyorum

network_diagram

. Bu nedenle, her iki arayüzde de bağlantıyı başlatmak istiyorum. Sen Ancak, birçok işletim sistemleri bu "ipucu" onur yok

Socket s = new Socket(hostname, port, localInterface, 0); 

kullanabilir ve yine yönlendirme tablosunu kullanacaktır

sayesinde

+0

Ne yazık ki, mümkün değil burada ağ diyagramı takmak için olabilir. En büyük problemim iki yönlendiriciye bağlı iki seri bağlantım olmasıdır. Ve iki yönlendirici ev sahibime ayrı ayrı bağlandı. Ve iki arayüz üzerinden iki farklı bağlantı başlatmak istiyorum. – Mohan

+0

Başka bir yere yükleyin ve bağlantı kurun, diyagramınız olmadan doğru bir cevap vermek zordur. –

+0

Resmi bağlantı - http://uploadpic.org/v.php?img=vSckl9f6Ze – Mohan

cevap

7

.

+0

Tamam, yani temelde "register" anahtar kelimesi gibi. Os, soketi bu arabirimle bağlama veya varsayılan arabirime bağlama özgürdür. Farklı bir arayüze bağlanırsa, benim uygulama çalışmayacak. SocketChannel'de herhangi bir soyutlama var mı? – Mohan

+0

Linux'ta "SO_BINDTODEVICE" gibi bir şey okuyorum. Ancak java'daki socketchanneloptions sınıfında "SO_BINDTODEVICE" bulunmuyor. – Mohan

+0

http://en.wikipedia.org/wiki/Host_model Linux genellikle barındırılan ve bir Soketi hangi arabirime bağladığınız görmezden gelecektir. –

1

böyle bir şey ifade ediyor mu:

Socket socket1 = new Socket(); 
socket1.bind(new InetSocketAddress("10.1.1.1", port)); 
socket1.connect(new InetSocketAddress("10.1.3.1", port)); 

Socket socket2 = new Socket(); 
socket2.bind(new InetSocketAddress("10.1.2.1", port)); 
socket2.connect(new InetSocketAddress("10.1.3.1", port); 
+0

Hayır. Yukarıdaki kod hiçbir zaman arabirimi kullanmaz ve her zaman soket1 ve soket2 varsayılan arabirime bağlanır. – Mohan

+0

Üzgünüz, yukarıda bahsettiğim şey .. Ancak yukarıdaki, varsayılan yönlendirme tablosunu kullanacağı varsayılan arabirime bağlanacaktır. Varsayılan yönlendirmenin Router B üzerinden olduğunu varsayarsak, sunucuya iki soket bağlantısı kurarsam da aynı bağlantıdan geçeceğim. Yani, bunun yerine eth1 arayüzünü kullanmak için soketi söylersem, varsayılan yönlendirmeyi atlayabilir ve iki soket için iki ayrı link kullanabilirim. – Mohan

+1

Aslında, bu işe yarıyor! – Mohan