Aprendí en Java cómo transmitir datos a través de una conexión de red usando ServerSocket y Socket, como:
Cliente.java:
Socket socket = new Socket(address, port);
int i;
while ((i = System.in.read())!= -1)
socket.getOutputStream().write(i);
Servidor.java:
ServerSocket server = new ServerSocket(port);
Socket socket = server.accept();
int i;
while ((i = socket.getInputStream().read())!= -1)
System.out.println(i);
Esto simplemente tendría el bloqueo del Cliente en System.in.read() en un extremo, y el bloqueo del Servidor en socket.getInputStream().read() en el otro, y los bytes pasan cuando se presiona ENTER en el programa Cliente.
¿Cómo lograría algo similar dentro de un solo programa, sin usar Sockets? Por ejemplo, si tuviera el subproceso A esperando la entrada del teclado que luego se transmite al subproceso B, que puede "consumir" los bytes en un momento arbitrario en el futuro, al igual que el servidor (arriba) puede consumir bytes de socket. getInputStream() en algún momento arbitrario?
¿Es PipedInput/OutputStream la solución adecuada para esto, o ByteArrayInput/OutputStream, o algo más? ¿O lo estoy pensando demasiado? Muchas gracias.
Solución del problema
Esta es principalmente una extensión de la respuesta que @VGR dio en los comentarios.
Si la totalidad de su "Red" existe dentro de la misma JVM única, entonces no necesita nada como sockets, solo puede usar Objetos y métodos.
El objetivo de Sockets era permitir que la JVM realizara acciones fuera de sí misma (normalmente con otra JVM en algún lugar del mundo exterior).
Entonces, a menos que esté tratando de interactuar con objetos fuera de su JVM actual, es tan simple como esto.
public class ClientServerExample
{
public static void main(String[] args)
{
Server server = new Server();
Client client = new Client();
client.sendMessage("Hello Server", server);
}
static class Server
{
String respond(String input)
{
String output = "";
System.out.println("Server received the following message -- {" + input + "}");
//do something
return output;
}
}
static class Client
{
void sendMessage(String message, Server server)
{
System.out.println("Client is about to send the following message to the server -- {" + message + "}");
String response = server.respond(message);
System.out.println("Client received the following response from the server -- {" + response + "}");
//maybe do stuff with the response
}
}
}
Aquí está el resultado de ejecutarlo.
Client is about to send the following message to the server -- {Hello Server}
Server received the following message -- {Hello Server}
Client received the following response from the server -- {}
Tenga en cuenta que server
no devuelve nada porque no hice nada en el servidor. Reemplace ese comentario con algún código propio y verá los resultados
No hay comentarios.:
Publicar un comentario