¿Cómo enviar un conjunto de datos del cliente al servidor en Java?
¡A través de la reflexión!
El siguiente es un ejemplo de interacción de información entre servidor y cliente:
Introducción a la API de Reflection
4. Programación de sockets Java Programación del protocolo TCP
1) Modelo de trabajo TCP: primero busque el restaurante (host/IP), luego busque la ventana (Socket/número de puerto de socket) después de llegar a la cafetería, el camarero espera la conexión y el cliente inicia una conexión con el camarero
Después de la conexión, una ventana puede organizar un camarero (hilo) para proporcionar servicios a cada cliente.
Cada proceso de servicio puede comunicarse en dos direcciones (flujo), comunicación Cerrar. la conexión una vez completada.
5. Programación del servidor TCP (cantina) (java.io.*,java.net.*,java.lang.*)
1) Crear una instancia de ServerSocket y vincular un puerto de servicio (Socket/número de puerto de socket)
2) Comience a monitorear la instancia de ServerSocket y espere las conexiones del cliente
3) Si un cliente se conecta, el Socket del cliente se obtiene la instancia
La instancia de Socket del cliente incluye el flujo de conexión establecido con el cliente
4) Para este cliente (Socket) Cree un hilo de servicio y proporcione servicios (ejecutar método) p>
5) Continúe esperando la siguiente conexión y regrese a 2)
6) El hilo de servicio completa el proceso de servicio de comunicación
p>
7) Número de puerto: 0~65535, menos de 1K están reservados para uso del sistema
6. Programación de cliente TCP
1) Cree una instancia de Socket y conéctese al servidor, crear correctamente significa conectarse. al servidor
Servidor
Socket s = new Socket("host", puerto)
2) El Socket del cliente y el Socket del servidor corresponden tanto a la entrada como a la salida streams
El s.getInputStream() del cliente está conectado al servidor s.getOutputStream()
El s.getOutputStream() del cliente está conectado al servidor s.getInputStream()<. /p>
3) Utilice subprocesos para procesar flujos de red
7. Reflexión de Java
1) La reflexión es el mecanismo de autogestión de Java (clases, objetos)
2) * Puedes descubrir el tipo de objeto y los métodos/propiedades/constructores del tipo a través del mecanismo de reflexión
3) * La reflexión de Java puede crear objetos y acceder a cualquier método y método de objeto. propiedades, etc.
4) Carga de clases
Carga de clases en la memoria: Java carga el archivo de clase del disco en la memoria como un objeto (instancia)
Este objeto son instancias de clase, es decir, todos estos objetos son instancias de clase
5) Las instancias de clase representan tipos en Java, tipos básicos de tipos: int.class, long.class
Tipo de clase Las instancias de clase se obtienen de la siguiente manera:
Class cls = String.class;
Class cls = Class.forName("java.lang.String");
Class cls = " abc".getClass();
El cls obtenido por el método anterior es el mismo objeto, que es el resultado de la carga de memoria de la clase String
paquete javase2. día06.ftp;importar java.io.Buffere
dOutputStream;importar java.io.File;importar java.io.FileOutputStream;importar java.io.IOException;importar java.io.InputStream;importar java.io.OutputStream;importar java.net.Socket;importar java.util.Scanner ;/** * El cliente ftp puede utilizar el comando ls pwd get */public class FtpClient { public static void main(String[] args) throws IOException{ FtpClient client = new FtpClient() client.open() } public void open() lanza IOException{ Socket s = new Socket("localhost", 9000); InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream() // Procesa la solicitud del cliente al servidor new RequestProcess( out ).start(); // Procesa la información de comentarios del servidor new ResponseProcess(in).start(); }// Procesa la solicitud del cliente a la clase del servidor RequestProcess extends Thread{ OutputStream out; . fuera = fuera; } public void run() { probar{ Escáner sc = nuevo Escáner(System.in){ String s = sc.nextLine(); s .equals("bye")){ System.exit(0); } } }catch(IOException e){ e.printStackTrace(); } } } class ResponseProcess extiende Thread{ InputStream in; this .in = in } public void run() { try{ while(true){ String encabezado = IOUtils.readLine(in); if(header.startsWith("texto")){ show(header,in); } else if(header.startsWith("archivo,")){ guardar(encabezado, en }
} }catch(IOException e){ e.printStackTrace(); } } } public void show(Encabezado de cadena, InputStream in) lanza IOException { int n = Integer.parseInt(header.split(",")[1]); for(int i=0; i tart() lanza IOException{ ServerSocket ss = new ServerSocket(9000); while(true){ Socket s = ss.accept(); new Agent(s).start(); class Agent extiende Thread{ Socket s; Agent(Socket s) { this.s = s; } public void run() { try{ InputStream in = s.getInputStream(); encabezado y luego envíe una línea de texto out.write("text,1\n".getBytes());//Encabezado de protocolo//Enviar contenido del mensaje, una línea de mensaje de texto out.write("Bienvenido al FTP servidor de demostración!\n". getBytes()); out.flush(); while(true){ //Leer la cadena de comando enviada por el cliente cmd = IOUtils.readLine(in).trim(); if("pwd ".equals(cmd)) {// Muestra el directorio actual pwd(out); }else if("ls".equals(cmd)){ ls(out); }else if(cmd.startsWith("get ") ){ get(cmd, fuera); }else if("adiós".equalsIgnoreCase(cmd)){ IOUtils.println(fuera, "texto,1"); IOUtils.println(fuera, "¡Adiós!"); s.close(); }else { out.write("text,1\n".getBytes());//Encabezado de protocolo out.write("Solo admite pwd,ls,get,bye!\n".getBytes ()); out.flush(); } } }catch(IOException e){ e.printStackTrace(); } } } public void pwd(OutputStream out) lanza IOException{ File dir = new File("."); .println(out, "text, 1"); IOUtils.println(out, dir.getCanonicalPath()); public void ls(OutputStream out) lanza IOException{ File dir = new File("."); archivos = dir.lista Archivos(); IOUtils.println(fuera, "texto",+archivos.length); para (Archivo f: archivos) { if(f.isDirectory()){ IOUtils.println(fuera, "["+f.getName) ()+"]"); }else{ IOUtils.println(out, f.getName()); public void get(String cmd, OutputStream out) lanza IOException{ //cmd="obtener nombre de archivo" Nombre de cadena = cmd.split("\\s+")[1]; Archivo archivo = nuevo Archivo(nombre); if(! file.exists()){ IOUtils.println(out, "text,1"); (out, "¡Sin archivo!"+nombre); return } //Encabezado del protocolo de archivo: IOUtils.println(out, "file,"+file.length()+","+name); (archivo); IOUtils.cp(entrada, salida); IOUtils.println(salida, "Enviado correctamente:" + nombre); }}