2016-11-05 7 views
1

ローカルホストで簡単な操作を行うプログラムを作った。数字や力を入力したり、別のクラスで計算して戻したりする私は、クライアントからデータを取得できるように、仮想マシンでこれを行う方法を知るために、ここでは仮想クライアントとそれに接続するための私のコードは次のとおりです。Java - ソケットを使用してローカルホストの代わりに仮想マシンに接続

package clientedatos; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
import java.net.Socket; 
import java.util.Scanner; 
public class ClienteDatos 
{ 
public static void main(String[] args) throws Exception 
{ 
int Valor, Potencia; 
Scanner Sc = new Scanner(System.in); 
System.out.println("Capture un valor que sera elevado a una potencia"); 
Valor=Sc.nextInt(); 
System.out.println("Capture la potencia"); 
Potencia=Sc.nextInt(); 
ObjectOutputStream oos = null; 
ObjectInputStream ois = null; 
Socket s = null; 
try 
{ 
// instancio el server con la IP y el PORT 
s = new Socket("127.0.0.1",5432); 
oos = new ObjectOutputStream(s.getOutputStream()); 
ois = new ObjectInputStream(s.getInputStream()); 
// envio un nombre 
oos.writeObject(Valor+","+Potencia); 
long a=System.currentTimeMillis(); 
// recibo la respuesta (el saludo personalizado) 
String ret = (String)ois.readObject(); 
long b=System.currentTimeMillis(); 
String[] respuesta = ret.split(","); 
long Latencia = (a-b)-Integer.parseInt(respuesta[1]); 
// muestro la respuesta que envio el server 
System.out.println(respuesta[0]); 
System.out.println("La latencia es: "+Latencia); 
} 
catch(Exception ex) 
{ 
ex.printStackTrace(); 
} 
finally 
{ 
if(ois != null) ois.close(); 
if(oos != null) oos.close(); 
if(s != null) s.close(); 
} 
} 
} 

そして、ここでは、サーバーのコードです

package datosclientes; 

import java.net.ServerSocket; 
import java.net.Socket; 
import java.io.ObjectInputStream; 
import java.io.ObjectOutputStream; 
public class ServerDatos 
{ 
public static void main(String[] args) throws Exception 
{ 
ObjectInputStream ois = null; 
ObjectOutputStream oos = null; 
Socket s = null; 
ServerSocket ss = new ServerSocket(5432); 
while(true) 
{ 
try 
{ 
// el ServerSocket me da el Socket 
s = ss.accept(); 
// informacion en la consola 
System.out.println("Se conectaron desde la IP: " 
+s.getInetAddress()); 
// enmascaro la entrada y salida de bytes 
ois = new ObjectInputStream(s.getInputStream()); 
oos = new ObjectOutputStream(s.getOutputStream()); 
// leo el nombre que envia el cliente 
long A=System.currentTimeMillis(); 
String ValorStr = (String)ois.readObject(); 
String[] input = ValorStr.split(","); 
int Valor = Integer.parseInt(input[0]); 
int Potencia = Integer.parseInt(input[1]); 
// armo el saludo personalizado que le quiero enviar 
for(int i = 1;i<Potencia; i++){ 
    Valor=Valor*Valor; 
} 
long B=System.currentTimeMillis(); 
String saludo = "El resultado es "+Valor+","+(A-B); 
// envio el saludo al cliente 
oos.writeObject(saludo); 
System.out.println("Resultado enviado..."); 
} 
catch(Exception ex) 
{ 
ex.printStackTrace(); 
} 
finally 
{ 
if(oos !=null) oos.close(); 
if(ois !=null) ois.close(); 
if(s != null) s.close(); 
System.out.println("Conexion cerrada!"); 
} 
} 
} 
} 
+0

VirtualBoxまたはVMwareを使用している場合、ポートをローカルホストに転送できます。 –

+0

これは実際にはJavaの質問ではありませんが、それは「仮想マシンで実行されているサーバーにどうやって接続しますか」です。プログラミング言語が本当に問題になるはずはありません。 –

+0

ああ、申し訳ありません。Javaを使用しているので、場合によっては追加する必要があると思います。 –

答えて

1

これは物理ホストへの接続と同じです。仮想マシンの設定の一部である2つのマシン間にネットワーク接続を確立し、適切なIPアドレス(または名前解決メカニズムで利用可能な場合はホスト名)と127.0.0.1ではなくポートを指定する必要があります。

コマンドラインツールでは、通常、パラメータからターゲットアドレスを読み取ります。

関連する問題