У меня есть несколько изображений базовой системы (диски VM), который я клонирую по мере необходимости для создания нового VMs. Я совершенствую эти базовые изображения путем разжигания их время от времени и получения патчей. Я сделал клонирование и при помощи Преобразователя vCenter VMware и при помощи просто копирования необработанных файлов в новый каталог и обновление .vmx файлов. Включите клон, переименуйте хост и обновите IP, и у меня есть готовый к хождению совершенно новый сервер. У меня есть приблизительно дюжина работ VMs двух серверов прямо сейчас с помощью этого метода.
Это - на самом деле вопрос о Java и больше appropiate для stackoverflow.com.
Однако стоит отметить, что в целом, эта техника распространена через все языки программирования, которые не абстрагируют далеко интерфейс сокета слишком много от Вас.
Способ по умолчанию сделать это путем определения интерфейса или IP в сокете.
Необходимо передать InetAddress
к Socket.bind (). Можно добраться Eumeration
из IP-адресов от определенного интерфейса со следующим кодом:
String iface = "venet0:0";
NetworkInterface nif = NetworkInterface.getByName(iface);
Enumeration nifAddresses = nif.getInetAddresses();
while (nifAddresses.hasMoreElements()) {
InetAddress addr = (InetAddress) nifAddresses.nextElement();
System.out.println(addr.getHostAddress());
}
Затем необходимо создать сокет с одним из этих InetAddresses. Если Вы имеете InetAddress
объект, выбранный названный addr
затем следующее будет работать
Socket soc = new java.net.Socket();
soc.bind(addr);
soc.connect(new InetSocketAddress(address, port));
Эта техника работает на большинство языков программирования на Linux. Вы используете bind(2)
с определенным IP для сообщения системы, с каким IP-адресом и интерфейсом Вы будете связывать.
На самом деле это довольно просто.
Если Вы знаете свои IP-адреса для exemple IP1 и IP2, просто необходимо создать сокет и связать его с IP, который Вы хотите использовать. Для exemple, если IP1 = 56.89.122.5:
Socket s = new Socket ();
s.bind (new InetSocketAddress ("56.89.122.5", 0)); // The second attribut is the Port. If it's value is 0, Java will automatically choose a free port.
s.connect (new InetSocketAddress ("myServerIp", 80));
Затем Вы отправляете свой Запрос HTTP. Я делаю это как этот:
PrintWriter writer = new PrintWriter (s.getOutputStream ());
BufferedReader reader = new BufferedReader (new InputStreamReader (s.getInputStream ()));
// Its an exemple of a GET request
writer.print ("GET http://myUrl.com HTTP/1.0\r\n\r\n");
writer.flush ();
StringBuffer sbResp = new StringBuffer ();
String szLine = new String ();
// I get the response here
while ((szLine = reader.readLine ()) != null)
sb.append (szLine);
s .close ();
reader.close ();
writer.close ();
Если Вы не знаете Вас IP-адреса, просто прочитайте ответ Phil. Он объясняет все об этом.