sistema para hacer fuente control conectar con computadoras codigo ciber adf 1rseie java sockets server client inputstream

fuente - ¿Cuál es la forma más sencilla de hacer un control remoto local para un programa Java?



http adf ly 1rseie (2)

Estoy tratando de hacer que un cliente sea remoto para un programa de Java, he leído acerca de los sockets, pero parece que hay varios protocolos y formas de hacerlo.

Básicamente, me gustaría poder presionar el botón en la parte del cliente de la aplicación y activar las funciones relacionadas en la parte del servidor, en local.

Supongo que debería estar escuchando un socket en un hilo separado y transferir / leer cadenas para saber qué fue empujado. es principalmente para el propósito de aprendizaje.

Me gustaría obtener algunos consejos / explicaciones rápidas para saber cómo lograr esto, he visto ejemplos de comunicación básica de clientes pero no encontré nada realmente claro sobre cómo se debe hacer esto (¿Nuevo hilo o no?) Y claramente Parece que no entiendo completamente el concepto de inputstream / outputstream.


Bien,

al implementar realmente un programa del lado del cliente y un programa del lado del servidor :)

para entender esto, necesitará algo de información sobre los principios básicos de la programación del servidor. Permite tomar un servidor web / de aplicaciones básico. Apache tomcat. Harás tu frente (el gui, etc.) como quieras, digamos que hagas un botón que diga "¡haz clic en mí y te diré hola!"

cuando haga clic en ese botón, deberá iniciar una función (si es una aplicación web, esto será en Javascript) que enviará un mensaje o "solicitud" al servidor. El servidor recibe esta solicitud, la procesa y envía una "respuesta" que contiene datos.

dentro de un proyecto web java mapea determinadas URL, como www.example.com/hello, a ciertas clases que contienen código (servlets o puntos finales). Normalmente, también debe adjuntar datos a su "solicitud" para que el servidor haga algo.

Tomemos un formulario de registro como ejemplo. harías varios campos de entrada y cuando hacemos clic en enviar, los datos de esos campos se adjuntan a la solicitud y se envían al servidor. en el lado del servidor, recibiríamos un objeto de solicitud (por ejemplo, javax.servlet.httpservletrequest). a partir de este objeto, podemos abrir un flujo de datos y leer los datos adjuntos.

normalmente (sin la ayuda de frameworks o librerías JSON) uno haría:

InputStream inputStream = request.getInputStream(); if (inputStream != null) { bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); char[] charBuffer = new char[128]; int bytesRead = -1; while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { stringBuilder.append(charBuffer, 0, bytesRead); }

una vez que obtenga los datos, haga algo con ellos y luego envíe una respuesta a través del objeto httpresponse. eso es lo básico de la informática del lado del servidor. Hay mucho más para esto, por ejemplo, enviar solicitudes asíncronas al servidor. Usar notaciones de objetos para facilitar la lectura de las solicitudes, utilizando REST para acceder fácilmente a los datos del nosotros.

pero para empezar, intente comenzar con un proyecto simple de tomcat y observe los servlets, las asignaciones de servlet ec.


Una forma muy simple de permitir que dos aplicaciones Java (un servidor y un cliente) hablen entre sí, especialmente en la misma máquina, es usar Invocación de Método Remoto (RMI). RMI permite compartir Objetos entre aplicaciones Java lo que significa que es una abstracción de muy alto nivel de comunicación y elimina la necesidad de escribir código de red personalizado o manejar la concurrencia involucrada.

Aquí hay un ejemplo muy básico:

Paso 1: crea una interfaz común

Cree una interfaz común que describa la funcionalidad proporcionada por el servidor:

package com.example.remote; import java.io.Serializable; import java.rmi.Remote; import java.rmi.RemoteException; public interface RemoteControlInterface extends Remote, Serializable { public void sendCommand(String command) throws RemoteException; }

Esta interfaz debe extender java.rmi.Remote y java.io.Serializable y cada methot debe poder lanzar una java.rmi.RemoteException . Ponlo en una biblioteca y utiliza esta biblioteca en el servidor y el cliente también. Cómo se logra esto, depende del IDE que esté utilizando. La forma más simple es, probablemente, poner el servidor, el cliente y la biblioteca común en el mismo proyecto.

Paso 2: crea la aplicación del servidor

Cree una implementación de la interfaz común en la aplicación de servidor:

package com.example.remote.server; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import com.example.remote.RemoteControlInterface; public class RemoteControl extends UnicastRemoteObject implements RemoteControlInterface { private static final long serialVersionUID = 1L; protected RemoteControl() throws RemoteException { } @Override public void sendCommand(String command) throws RemoteException { System.out.println("remote control asked for " + command); } }

La implementación de la interfaz común debe extender java.rmi.server.UnicastRemoteObject .

Cree la aplicación de servidor real que publica una instancia de la implementación de RemoteControlInterface como remoteControl como un servidor que está escuchando en el puerto 1234 .

package com.example.remote.server; import java.net.MalformedURLException; import java.rmi.AlreadyBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class Server { public static void main(String[] args) throws MalformedURLException, RemoteException, AlreadyBoundException { Registry registry = LocateRegistry.createRegistry(1234); registry.bind("remoteControl", new RemoteControl()); } }

Paso 3: crea la aplicación cliente

Cree la aplicación de cliente real que se conecta a un servidor en el puerto 1234 y recupera una instancia publicada de RemoteControlInterface usando el nombre remoteControl .

package com.example.remote.client; import java.rmi.AccessException; import java.rmi.NotBoundException; import java.rmi.RemoteException; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; import com.example.remote.RemoteControlInterface; public class Client { public static void main(String[] args) throws AccessException, RemoteException, NotBoundException { Registry registry = LocateRegistry.getRegistry(1234); RemoteControlInterface greetingService = (RemoteControlInterface) registry.lookup("remoteControl"); greetingService.sendCommand("helloWorld"); } }

Esto hará que la aplicación del servidor para imprimir remote control asked for helloWorld en su consola.

Los parámetros y el valor de retorno de todos los métodos en la interfaz común pueden ser:

  • Cualquier tipo primitivo de Java (booleano, int, ...)
  • Cualquier clase que compartan ambas aplicaciones (String, Date, ...) que implemente java.io.Serializable siempre que ambas aplicaciones tengan la misma versión del archivo de clase correspondiente. La letra es verdadera para todas las clases proporcionadas por el JRE y todas las clases ubicadas en la biblioteca común.

Si bien RMI puede hacer mucho más, esto debería ser suficiente para implementar un control remoto simple.