Java - 使用套接字连接到虚拟机而不是本地主机

标签 java sockets p2p

我编写了一个程序来在本地主机中执行简单的操作,例如输入数字和幂,在另一个类中计算它并将其发送回来,但我想知道如何使用虚拟机执行此操作,以便我可以从客户端获取数据,这是我的虚拟客户端代码及其连接:

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!");
}
}
}
}

最佳答案

这与连接到物理主机没有什么不同。您需要在两台计算机之间建立网络连接(这是虚拟机设置的一部分),然后指定适当的 IP 地址(或主机名,如果通过名称解析机制可用)和端口,而不是 127.0.0.1

对于命令行工具,您通常从参数中读取目标地址。

关于Java - 使用套接字连接到虚拟机而不是本地主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40433481/

相关文章:

scala - 互联网上的 Akka-remote

java - 通过 Java 套接字发送小文件时的性能问题

java - 使用 DES 算法对 Java 中的文件进行加密和解密

c# - 异步套接字客户端接收

Java套接字服务器使Windows Server 2003的网络死机

java - 开发p2p小程序需要知道什么

c# - 没有中央服务器的 P2P 握手

java - 为什么背景颜色拒绝填满整个屏幕

java - 无锁队列中的这些行不是必需的吗?

ios - iOS 上的套接字 connect() 阻塞超过 30 秒