Запрос HTTP с VPS на 2 дюйм/с в Java

У меня есть несколько изображений базовой системы (диски VM), который я клонирую по мере необходимости для создания нового VMs. Я совершенствую эти базовые изображения путем разжигания их время от времени и получения патчей. Я сделал клонирование и при помощи Преобразователя vCenter VMware и при помощи просто копирования необработанных файлов в новый каталог и обновление .vmx файлов. Включите клон, переименуйте хост и обновите IP, и у меня есть готовый к хождению совершенно новый сервер. У меня есть приблизительно дюжина работ VMs двух серверов прямо сейчас с помощью этого метода.

0
задан 23 December 2009 в 07:13
2 ответа

Это - на самом деле вопрос о 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-адресом и интерфейсом Вы будете связывать.

0
ответ дан 5 December 2019 в 17:47
  • 1
    Привет, спасибо за этот большой anwswer. Я приношу извинения для регистрации его здесь, но мой основной вопрос состоял в том, чтобы знать, возможно ли. Java был моим вторым вопросом :). Так или иначе, я don' t понимают различие addr и адреса. soc.bind (addr); soc.connect (новый InetSocketAddress (адрес, порт)); я думаю ' addr равняется 78. ***. ***.52 для exemple, одного из IP моего VPS. Но ' address' я don' t понимают. Спасибо, Bill0ute –  bill0ute 24 December 2009 в 04:00

На самом деле это довольно просто.

Если Вы знаете свои 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. Он объясняет все об этом.

0
ответ дан 5 December 2019 в 17:47

Теги

Похожие вопросы