|
Mostrar Temas
|
Páginas: [1]
|
1
|
Programación / Java / SOCKETS UDP Ayuda!!
|
en: 15 Mayo 2022, 14:21 pm
|
Buenas, estoy haciendo un programa en java Cliente y Servidor con sockets UDP. El cliente y el servidor se deben de enviar mutuamente ( intercambiando mensajes ) la hora actual en el momento de ejecucion, y tambien deben de imprimir el número segundos transcurridos en el intercambio de mensajes(ESTO ULTIMO NO TENGO NI IDEA DE COMO LO PUEDO HACER). He hecho el codigo del intercambio de hora pero me da error. Si alguien porfavor me pudiese ayudar a saber donde esta el fallo y tambien si me puede ayudar a saber como puedo hallar los segundos transcurridos, estaría muy agradecida. Codigo Cliente: import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; import java.text.SimpleDateFormat; import java.util.Date;
public class ClienteUDPHora {
public static void main(String[] args) { try { DatagramSocket socketUDP = new DatagramSocket(); byte[] mensaje = args[0].getBytes(); InetAddress hostServidor = InetAddress.getByName(args[1]); int puertoServidor = 5000; //Construimos un datagrama para enviar el mensaje al Servidor DatagramPacket peticion = new DatagramPacket(mensaje, args[0].length(), hostServidor, puertoServidor); //Enviamos el datagrama SimpleDateFormat dateFormat=new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");// Establecer el formato de fecha System.out.println("Fecha y hora enviadas al servidor: "+dateFormat.format(new Date()));
socketUDP.send(peticion); //Construimos el datagrama que contendra la respuesta byte[] buffer = new byte[1000]; DatagramPacket respuesta = new DatagramPacket(buffer, buffer.length); socketUDP.receive(respuesta); //Enviamos la respuesta del servidor a la salida estandar System.out.println("Respuesta: "+ new String(respuesta.getData())); //Cerramos el soccket socketUDP.close(); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
}
Codigo Servidor: import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.text.SimpleDateFormat; import java.util.Date;
public class ServidorUDPHora {
public static void main(String[] args) { try { @SuppressWarnings("resource") DatagramSocket socketUDP = new DatagramSocket(5000); byte[] buffer = new byte[1000]; while(true) { //Construimos el DatagramPacket para recibir peticiones DatagramPacket peticion = new DatagramPacket(buffer, buffer.length); //Leemos una peticion del DatagramSocket socketUDP.receive(peticion); System.out.println("Datagrama recibido del host: "+ peticion.getAddress()); System.out.println(" desde el puerto remoto: "+ peticion.getPort()); //Construimos el DatagramPacket para enviar la respuesta DatagramPacket respuesta = new DatagramPacket(peticion.getData(), peticion.getLength(), peticion.getAddress(), peticion.getPort()); SimpleDateFormat dateFormat=new SimpleDateFormat("[yyyy-MM-dd HH:mm:ss]");// Establecer el formato de fecha System.out.println("Fecha y hora enviadas al cliente: "+dateFormat.format(new Date()));
//Enviamos la respuesta, que es un eco socketUDP.send(respuesta); } } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}
}
|
|
|
2
|
Programación / Java / SOCKETS AYUDA URGENTE PORFAVOR!!!!
|
en: 8 Mayo 2022, 20:23 pm
|
Buenas, tengo un problema y es que no sé como puedo poner el tiempo transcurrrido (tanto en Cliente como en Servidor) antes de que se imprima la fecha-hora en formato legible por humanos. Apunte: entre cliente y Servidor se intercambian la fecha actual en su tiempo de ejecución. Agradeceria muchiisimo si alguien me pudiese ayudar A continuacion el codigo de Cliente y Servidor: Cliente: public class ClienteHora {
public static void main(String[] args) throws IOException {
final String HOST="127.0.0.1"; //INDICO A QUIEN ME VOY A CONECTAR final int PUERTO=5000;//Pongo el puerto que puse en el servidor //Clases necesarias DataInputStream in; DataOutputStream out; //Cuando el cliente conecta exitosamente al servidor: //Cliente TCP conectado a <nombre host> en el puerto <número puerto> Socket sc = new Socket(HOST, PUERTO); //A esta clase socket le pasamos el HOST y el PUERTO System.out.println("Cliente TCP conectado a: "+HOST+" en el puerto: "+PUERTO); //Creamos puentes de comunicacion in = new DataInputStream(sc.getInputStream()); //inputStream(LEE): cliente -> servidor out = new DataOutputStream(sc.getOutputStream()); String mensaje = in.readUTF(); //leemos el mensaje System.out.println(mensaje); //Esto me servirá para contar los caracteres, los espacios String mayus=""; String minus=""; String numeros=""; String letras=""; int n_mayus=0; int n_minus=0; int n_numeros=0; int n_letras=0; int n_espacios=0; for(int i=0; i<mensaje.length();i++) { if(Character.isLetter(mensaje.charAt(i))) { n_letras++; letras+=mensaje.charAt(i)+" * "; } if(Character.isUpperCase(mensaje.charAt(i))) { n_mayus++; mayus+=mensaje.charAt(i)+" * "; } if(Character.isLowerCase(mensaje.charAt(i))) { n_minus++; minus+=mensaje.charAt(i)+" * "; } if(Character.isDigit(mensaje.charAt(i))) { n_numeros++; numeros+=mensaje.charAt(i)+" * "; } if(Character.isSpaceChar(mensaje.charAt(i))) { n_espacios++; } } System.out.println("Mensaje recibido: "+mensaje); System.out.println("Se han recibido: "+"\n -El número de caracteres: "+n_letras+"\n -Mayusculas: "+n_mayus+"\n -Minusculas: "+n_minus+ "\n -El número de espacios: "+n_espacios+"\n -La cantidad de datos numéricos: "+n_numeros); Date fechaHoraActuales = new Date(); out.writeUTF("fecha y hora enviadas al Servidor: "+ fechaHoraActuales); /* long startTime = System.currentTimeMillis(); // Run some code; long stopTime = System.currentTimeMillis(); System.out.println("El tiempo transcurrido fue: " + (stopTime - startTime) + " miliseconds."); */ sc.close(); } }
Servidor import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Date;
public class ServidorHora {
public static void main(String[] args) throws IOException { ServerSocket servidor = null; Socket sc = null; final int PUERTO = 5000; final String HOST = "127.0.0.1"; DataInputStream in; DataOutputStream out; servidor = new ServerSocket(PUERTO); System.out.println("El servidor de DayTime ha arrancado: ServerSocket [direccion="+HOST+", localport="+PUERTO+"]" ); //El servidor siempre estará atento a escuchas peticiones de los clientes
while(true) { sc = servidor.accept(); System.out.println("Cliente conectado"); in = new DataInputStream(sc.getInputStream()); out = new DataOutputStream(sc.getOutputStream()); Date fechaHoraActuales = new Date(); out.writeUTF("fecha y hora enviadas al Cliente: "+ fechaHoraActuales); String mensajeN = in.readUTF(); System.out.println(mensajeN); /* long startTime = System.currentTimeMillis(); // Run some code; long stopTime = System.currentTimeMillis(); System.out.println("El tiempo transcurrido fue: " + (stopTime - startTime) + " miliseconds."); */ System.out.println("Cliente desconectado: "+ sc); sc.close(); }
}
}
|
|
|
3
|
Programación / Java / SOCKETS SERVIDOR AYUDA PORFAVOR!!
|
en: 3 Mayo 2022, 12:55 pm
|
Buenas tengo una duda y es que en un ejercicio a realizar con Sockets se me pide que el Servidor le envíe al Cliente la fecha y la hora actuales, lo he hecho pero me da fallos a la hora de ejecutar el servidor y no se porque, a continuacion paso el codigo del servidor y del cliente(es el que recibe la fecha y hora del servidor y debe de mostrar la siguiente informacion: Se han recibido <número de caracteres, incluidos espacios y saltos de línea> bytes <Fecha y hora recibidas tal cual se recibieron del servidor de hora>. Yo para ello he hecho un bucle for que analice el mensaje recibido del servidor para poder contar el numero de caracteres, los espacios y mostrarlos por pantalla), es la primera vez que trato con sockets y muchas veces no se si lo estoy haciendo bien o no  . SERVIDOR: import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Date;
public class ServidorDiaHora {
@SuppressWarnings({ "resource", "unused" }) public static void main(String[] args) throws IOException { ServerSocket servidor = null; Socket sc = null; final int PUERTO = 5000; final String HOST="127.0.0.1"; //INDICO A QUIEN ME VOY A CONECTAR DataInputStream in; DataOutputStream out; servidor = new ServerSocket(PUERTO); //- Cuando se inicia el Socket Servidor: //El servidor de DayTime ha arrancado: ServerSocket[ addr=<dirección>,localport=<número puerto local>] System.out.println("El servidor de DayTime ha arrancado" ); //El servidor siempre estará atento a escuchas peticiones de los clientes while(true) { sc = servidor.accept(); //Cliente conectado desde <host> al puerto <número puerto local> desde el puerto <número puerto //cliente> System.out.println("Cliente conectado");//Aviso cliente conectado //Creamos puentes de comunicacion in = new DataInputStream(sc.getInputStream()); //inputStream(LEE): cliente -> servidor out= new DataOutputStream(sc.getOutputStream()); //outputStream(ESCRIBE): servidor -> cliente //Esto me servirá para enviar la fecha y la hora Date fechaHoraActuales = new Date(); out.writeUTF("Fecha y Hora enviadas: "+ fechaHoraActuales); //Yo le escribo un mensaje sc.close();//Cerramos el cliente. System.out.println("Cliente desconectado");//Aviso de que esta desconectado }
}
}
CLIENTE: import java.io.DataInputStream; import java.io.IOException; import java.net.Socket;
public class CienteDiaHora {
public static void main(String[] args) throws IOException { final String HOST="127.0.0.1"; //INDICO A QUIEN ME VOY A CONECTAR final int PUERTO=5000;//Pongo el puerto que puse en el servidor //Clases necesarias DataInputStream in; //Cuando el cliente conecta exitosamente al servidor: //Cliente TCP conectado a <nombre host> en el puerto <número puerto> Socket sc = new Socket(HOST, PUERTO); //A esta clase socket le pasamos el HOST y el PUERTO System.out.println("Cliente TCP conectado a: "+HOST+" en el puerto: "+PUERTO); //Creamos puentes de comunicacion in = new DataInputStream(sc.getInputStream()); //inputStream(LEE): cliente -> servidor String mensaje = in.readUTF(); //leemos el mensaje System.out.println(mensaje); //Esto me servirá para contar los caracteres, los espacios String mayus=""; String minus=""; String numeros=""; String letras=""; int n_mayus=0; int n_minus=0; int n_numeros=0; int n_letras=0; int n_espacios=0; for(int i=0; i<mensaje.length();i++) { if(Character.isLetter(mensaje.charAt(i))) { n_letras++; letras+=mensaje.charAt(i)+" * "; } if(Character.isUpperCase(mensaje.charAt(i))) { n_mayus++; mayus+=mensaje.charAt(i)+" * "; } if(Character.isLowerCase(mensaje.charAt(i))) { n_minus++; minus+=mensaje.charAt(i)+" * "; } if(Character.isDigit(mensaje.charAt(i))) { n_numeros++; numeros+=mensaje.charAt(i)+" * "; } if(Character.isSpaceChar(mensaje.charAt(i))) { n_espacios++; } } System.out.println("Mensaje recibido: "+mensaje); System.out.println("Mayusculas("+n_mayus+"): "+mayus); System.out.println("Minusculas("+n_minus+"): "+minus); System.out.println("Numeros("+n_numeros+"): "+numeros); System.out.println("Letras("+n_letras+"): "+letras); System.out.println("Espacios: "+n_espacios); //- Una vez ha recibido la información del servidor: //Se han recibido <número de caracteres, incluidos espacios y saltos de línea> bytes //<Fecha y hora recibidas tal cual se recibieron del servidor de hora> sc.close(); }
}
|
|
|
4
|
Programación / Bases de Datos / CONSULTA
|
en: 29 Abril 2022, 12:02 pm
|
No sé como sería la siguiente consulta, tengo que pasarla a SQL, para un proyecto de Base de datos  CONSULTA: Lista de ganadoras de todas la ediciones disputadas
|
|
|
5
|
Programación / Java / AYUDA CON Inversiones de 1
|
en: 27 Abril 2022, 18:41 pm
|
Buenas, he hecho el codigo en java pero no se como modificar el codigo para que haga las inversiones de 1. Se trata de un codigo divide y venceras donde se me proporciona un .txt o un .dat con un conjunto de numeros de entre los cuales se proporciona el numero uno y aparece en la lista de numeros una sola vez. Y tengo que hallar las inversiones de 1, sé que el resultado correcto que me debe de dar la modificacion es de: 545 A continuacion el fichero de inversiones de uno y el codigo package default_package;
import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Scanner;
/** * The Class Inversiones. * Clase que calcula el número de inversiones que hay en un array para ordenarlo * * @author Pitagoras * @version 20.03.2022 */ public class Inversiones { /** * The main method. * * @param args the arguments * @throws IOException Signals that an I/O exception has occurred. */ public static void main(String[] args) throws IOException { Scanner leer = new Scanner(new File("C:\\Ruta\\InversionsTest.dat")); int nCases = leer.nextInt(); double a[] = new double[nCases]; for(int i=0; i<nCases; i++) { a[i]= leer.nextInt(); } System.out.println("El número de inversiones que tiene el array dado es: " +ordenar(a, 0, a.length-1)); } /** * Merge. Método valido para ordenar el array. * * @param a2 array que queremos ordenar * @param a numero de la izquierda * @param middle la mitad entre el límite inferior y superior * @param b numero de la derecha * @return el número de inversiones que hay durante el recorrido del método */ private static int merge (double[] a2, int a, int middle, int b) { int cont=0; int i=0, j=0, k=a; double[] left = Arrays.copyOfRange(a2, a, middle+1); double [] right = Arrays.copyOfRange(a2, middle+1, b+1); while(i<left.length && j<right.length) { if(left[i] <= right[j]) { a2[k++]=left[i++]; }else { a2[k++]=right[j++]; cont += (middle+1)-(a+i); } } while(i<left.length) { a2[k++] = left[i++]; } while (j < right.length) { a2[k++] = right[j++]; } return cont; }
/** * Método para ordenar el array, recursivo. Parecido a MergeSort. * * @param a2 array a ordenar * @param min, limite inferior del array que queremos ordenar - referido a posiciones dentro del array * @param max, limite superior del array que queremos ordenar - referido a posiciones dentro del array * @return numero de inversiones necesarias para ordenar el array */ private static int ordenar(double[] a2, int min, int max) { int cont=0; int middle = (min+max)/2; if(min<max) { cont = ordenar (a2, min, middle); cont = cont + ordenar (a2, middle + 1, max); cont = cont + merge (a2, min, middle, max); } return cont; } }
ES LO UNICO QUE ME FALTA PARA TERMINARLO, PORFAVOR SI ALGUIEN ME PUDIESE AYUDAR .txt de las inversiones de uno: 1000 54044 14108 79294 29649 25260 60660 2995 53777 49689 9083 16122 90436 4615 40660 25675 58943 92904 9900 95588 46120 29390 91323 85363 45738 80717 57415 7637 8540 6336 45434 65895 61811 8959 9139 31027 87662 2484 65550 23260 15616 3490 49568 5979 44737 52808 72122 37957 34826 21419 73531 94323 52910 84496 71799 50162 1692 1565 59279 56864 20141 13893 63942 6055 33424 44771 25678 33639 27793 41268 1857 63388 32976 46195 61291 61740 61680 45264 76361 49243 73250 67432 29124 15198 30626 18950 13857 32569 45179 47696 21283 77169 26357 97885 54741 57246 61929 25997 45859 3353 32204 97451 60550 49516 38558 57674 36443 666 32486 54910 24666 45119 40779 3441 83779 60645 63003 59616 7364 69058 41651 12201 13234 19717 11536 70350 15611 74484 96153 4127 60035 19418 58613 28590 32917 97780 17644 15836 88046 26489 38410 54618 16967 81604 60064 5833 80689 43137 57274 8002 4445 42933 75378 15130 10689 98579 42780 38379 76394 66337 15126 59535 53639 43182 88220 5506 21939 26719 32919 78383 62297 30677 15301 35277 2240 37292 11269 92554 12813 63131 25964 15618 11318 72799 43976 4698 32984 5 56322 30793 46586 36082 25956 61243 44613 59907 13187 43815 52408 63547 86233 7901 50572 29212 10912 54449 373 69509 3580 31479 66601 35427 49309 50428 76859 19840 95749 76993 45747 67663 85229 26778 72164 73627 31869 22208 17759 29409 20625 27533 3911 28506 13185 72229 2975 96029 66725 67778 77399 90300 16005 39433 33342 98536 66330 41629 79932 64508 80437 58093 7690 34357 87977 78134 6271 72856 43004 81631 4654 94363 37138 62061 18913 42432 11926 9778 23507 52921 12302 61620 89415 52561 8564 80333 62937 17680 49024 37850 54127 92136 65865 19416 86651 81030 12473 37840 36215 88329 23844 38832 1807 1726 84720 10551 12770 33510 23806 6831 41122 36046 2410 11380 8861 18964 37605 2021 59504 57029 64121 85107 64293 64821 72694 32390 55767 3884 74771 393 21050 70556 39830 42172 5615 47643 48677 5093 38547 4808 74607 71200 88387 94071 45031 83426 83246 96061 91471 37207 57815 30779 45176 70833 29490 27760 74104 21444 73173 10086 56241 48369 73755 93275 66791 2437 18827 61990 3213 43007 46942 47386 98002 80099 90898 28860 53348 3790 54478 50789 53673 81845 76946 31398 15539 43923 68172 43943 11674 5147 49577 7639 2902 56983 51372 87907 65260 46019 69134 65982 35068 81730 76650 67535 65607 86101 4387 9658 56971 38760 90175 26434 22509 10166 19048 3135 28671 63621 90284 56798 82077 15749 77755 45814 51006 26305 31977 48619 18712 90691 8001 32067 70357 38111 41552 74876 81391 40492 24784 22370 39440 57089 73160 45027 53617 35969 46450 40871 71843 12703 17953 52853 69725 67213 62722 73693 91338 14128 12506 75060 56344 31645 23821 2907 2229 7702 54151 49626 34757 19073 1923 11433 4156 34993 47527 28810 55157 69505 65503 64854 23249 79143 9697 35584 42411 13695 7789 66572 60321 54166 71208 76781 69793 42022 52118 62723 2774 17563 10157 73884 64476 44243 84801 83448 68584 56296 77751 95159 23154 24632 8184 39214 52344 46545 33325 85650 14755 92211 34714 41604 90705 97995 76462 85611 76657 58480 7258 91761 17400 74630 8191 83012 85542 71016 35146 50365 37585 62220 2323 23949 50093 8154 66092 75562 15603 49424 19639 37679 18186 78875 40160 63991 10977 53885 83218 34001 3723 63889 1 40515 36743 42770 32026 24502 52208 17897 78882 26409 74817 50557 4129 97514 67021 28240 45301 98467 53298 94746 59508 4533 28812 79175 57458 71279 14985 61081 72641 50192 24833 10559 3359 31540 74717 6619 34886 22723 62826 4364 44080 4087 31292 76363 98421 92175 71837 88423 84188 63345 30108 18021 38992 73015 6978 19730 77314 20601 73041 40457 43550 33086 86253 71896 24236 1291 9491 16822 91587 98602 26555 30077 10302 24493 2985 39469 90347 30520 42477 56481 5914 38961 10218 16024 93342 92630 7566 74142 54657 81366 88386 85815 4565 5439 1104 2673 65606 83445 70854 9537 73222 2544 31425 63015 81452 90318 75062 83615 19052 92492 48714 85098 15267 31282 91826 92471 43067 73944 47591 71457 79798 90235 60824 53372 53812 27261 49099 19917 76978 99670 58487 33747 16944 30719 18716 76276 93076 70826 63639 85111 98441 21908 35279 33927 33433 77583 95025 31616 25321 37617 93145 11286 15024 6719 64723 4077 78584 30370 98798 67730 21048 1287 87867 44930 4798 37691 61593 86819 50990 9059 57590 71412 14209 43285 79232 43891 290 36110 69671 88539 59260 88464 54759 40328 37037 85253 94603 18976 89833 74448 90717 20688 18961 46537 53603 42627 39150 8087 37842 80079 33426 48812 47406 10748 44375 61932 80967 63310 7592 70797 1452 3192 30692 27239 31166 77857 51830 22097 68817 55733 33720 78069 51195 32571 12279 28924 66443 51929 95208 55440 17321 82411 38022 61143 50625 2213 8447 95005 15634 39956 99281 88705 97294 67363 47231 17704 69554 19093 38744 709 50363 21233 75916 53339 97687 88562 35763 85496 96919 60369 9870 11363 9941 6401 38441 91650 9102 62077 19340 10745 42333 66689 39672 6473 15741 61335 31890 16099 15865 6445 81665 85352 8749 65186 11147 62916 33332 84931 39050 34043 79368 16678 85675 17812 29439 26532 82653 65587 57526 21148 29904 27408 7756 23943 33633 49278 28774 72872 9540 53171 64267 52998 4098 29864 36202 47534 50455 82772 12347 34049 78222 90264 10215 84769 42361 13264 13181 66773 26246 74122 84239 9743 33012 32183 2602 70562 20340 62909 73842 5968 44347 60842 3905 54985 57584 10738 39266 70711 60420 41807 10619 27691 28387 47429 65781 49825 1752 27004 79338 6714 19519 22796 4086 66695 82806 81923 70029 78043 17813 74517 1511 25527 20419 26266 90542 27647 56104 17055 62523 64731 65832 49687 46803 69704 50396 2311 87194 92658 70094 91902 29154 2953 14475 21086 26777 6337 6024 43316 75225 96054 41957 8842 39904 43313 33834 37062 51515 23681 73489 81967 93066 76128 48996 55462 10655 3320 32287 13924 32838 4013 85822 33106 15586 62938 67492 18225 7109 72726 93494 97566 24625 6993 46189 13906 70171 92259 21202 68892 96783 62823 62087 70942 92548 64324 42702 47758 39682 68866 50780 90020 12259 15487 28282 73821 13175
|
|
|
6
|
Seguridad Informática / Hacking / AYUDA PORFAVOR CON Prueba de testing con Selenium
|
en: 21 Marzo 2022, 10:48 am
|
Prueba de testing con Selenium En kali linux tengo que hacer un testing con Selenium pero no se como utilizarla para automatizar alguna busqueda de alguna pagina web con la que pueda testear el funcionamiento de dicha web, el problema es que no se como hacerlo y que comandos debo de usar en la shell de kali para testear un sitio web. Si alguien me puediese ayudar porfavor. Este es el sitio web del Selenium: https://www.selenium.dev/
|
|
|
8
|
Programación / Programación C/C++ / No se como empezar!!
|
en: 27 Diciembre 2021, 14:49 pm
|
Buenas tardes tengo un PROBLEMA!! y es que no sé como empezar el codigo del siguiente enunciado: Crear en C un programa Padre que cree tantos procesos hijos como argumentos restantes tenga en la linea de ordenes el proceso padre.
saludos
|
|
|
9
|
Programación / Programación C/C++ / Buenas, necesito ayuda URGENTE!! en un ejercicio, y es que siempre me da Violacion de segmento
|
en: 3 Diciembre 2021, 16:19 pm
|
Buenas, necesito ayuda URGENTE!! en un ejercicio, y es que siempre me da Violacion de segmento y ya no se que mas hacer. Si alguien me pudiese ayudar se lo agradeceria de todo corazón. #include <stdio.h> #include <ctype.h> #include <string.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <dirent.h> #define NORMAL "\x1B[0m" #define GREEN "\x1B[32m" #define BLUE "\x1B[34m" #define RED "\x1b[32m" /* Función que procesa la lectura un archivo */ void procesoArchivo(char *archivo); void mostrarContenido(char * path); int main(char **argv, int argc){ int opcion=0; char *path; //Es para la ruta char *type; char *name; int size; int maxdepth; int niveles; unsigned num; // Con ello evitamos fallos de violacion de segmentacion. Se le asigna un espacio en memoria. for(int i; i<argc; i++){ if(strcmp(argv [i ], "-maxdepth") == 0){ //Si la cadena que tengo en la posicion i es igual a " " //Devolverá 0 en caso de ser iguales caracter a caracter if( i == argc){ //Si contador es igual al ultimo numero de parametros muestra error fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } opcion=1; } else if(strcmp(argv [i ], "-type") == 0){ if( i == argc){ fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } opcion=2; } else if(strcmp(argv [i ], "-name") == 0){ if( i == argc){ fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } opcion=3; } else if(strcmp(argv [i ], "-size") == 0){ if( i == argc){ fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } opcion=4; }else{ switch(opcion){ case 0: //Ruta if(i != 1){ ///DUDA si va i o argv[i] fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } path=argv[i]; break; case 1: //Maxdepth maxdepth <- atoi(argv [i ]); //Convierte una cadena a un entero niveles = maxdepth; if(! niveles){ //Si niveles es vacio if(niveles != NULL) fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } if(niveles < 0){ //Si niveles es menor que 0 fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } break; case 2: //type //Si la cadena que haya en la posicion i es distinta a la mencionada da un error if(strcmp(argv [i ], "d") != 0){ fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } if(strcmp(argv [i ], "f") != 0){ fprintf(stderr , "Error. Modo de empleo: mifind [camino] [opciones]\n"); } //opcion = 3; type=argv[i]; break; case 3: //name name=argv[i]; break; case 4: //size break; } } } /* Con un puntero a DIR abriremos el directorio */ //Cuando solo tengo la ruta DIR *dir; if (argv[1] != NULL){ dir = opendir (argv[1]); if (dir == NULL){ printf("\nDirectorio ""%s"" No valido!\n\n",argv [1] ); closedir (dir); return 0; } else { dir = opendir (argv[1]); path = argv[1]; } } else { dir = opendir ("."); } /* en *ent almacena información sobre el archivo que se esta "obteniendo" a cada momento */ struct dirent *ent; /* Leyendo uno a uno todos los archivos que hay */ while ((ent = readdir (dir)) != NULL) { /* Nos devolvera el directorio actual (.) y el anterior (..) */ if ( (strcmp(ent ->d_name , ".")!=0 ) && (strcmp(ent ->d_name , "..")!=0 )) { /* Una vez tenemos el archivo, lo pasamos a una funcion para procesarlo. */ procesoArchivo(ent->d_name); } } closedir (dir); return EXIT_SUCCESS; //mostrarFiltrado(path, name, type, size, maxdepth); mostrarFiltrado(path); } void procesoArchivo(char *archivo) { /* Para "procesar", o al menos, hacer algo con el archivo, vamos a decir su tamaño en bytes */ /* */ FILE *fich; long ftam; fich =fopen(archivo , "r"); if (fich) { fseek(fich , 0L, SEEK_END ); /* Si todo va bien, decimos el tamaño */ printf ("%30s (%ld bytes)\n", archivo , ftam ); } else /* Si ha pasado algo, solo decimos el nombre */ } //void mostrarFiltrado(char *path, char *name, char *type, int size, int maxdepth){ //} /* Mostrar Contenido Recursivo */ void mostrarFiltrado(char * path) { DIR * d = opendir(path); if(d==NULL) return; struct dirent * dir; while ((dir = readdir(d)) != NULL) { if(dir-> d_type != DT_DIR) printf("%s%s\n",BLUE , dir ->d_name ); else if(dir -> d_type == DT_DIR && strcmp(dir ->d_name ,".")!=0 && strcmp(dir ->d_name ,"..")!=0 ) { printf("%s%s\n",GREEN , dir ->d_name ); char d_path[255]; sprintf(d_path , "%s/%s", path , dir ->d_name ); mostrarFiltrado(d_path); } //if(strcmp(argv[2], "-type") == 0){ // Funcion_type(dir, type); //} } closedir(d); }
MOD: Corregidas etiquetas de Código GeSHi
|
|
|
|
|
|
|