feat(java): El juego de adivinar el número está hecho.
This commit is contained in:
		
							parent
							
								
									270d2e8e29
								
							
						
					
					
						commit
						d24413f050
					
				
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										73
									
								
								Actividad31/build.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								Actividad31/build.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,73 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<!-- You may freely edit this file. See commented blocks below for -->
 | 
			
		||||
<!-- some examples of how to customize the build. -->
 | 
			
		||||
<!-- (If you delete it and reopen the project it will be recreated.) -->
 | 
			
		||||
<!-- By default, only the Clean and Build commands use this build script. -->
 | 
			
		||||
<!-- Commands such as Run, Debug, and Test only use this build script if -->
 | 
			
		||||
<!-- the Compile on Save feature is turned off for the project. -->
 | 
			
		||||
<!-- You can turn off the Compile on Save (or Deploy on Save) setting -->
 | 
			
		||||
<!-- in the project's Project Properties dialog box.-->
 | 
			
		||||
<project name="Actividad31" default="default" basedir=".">
 | 
			
		||||
    <description>Builds, tests, and runs the project Actividad31.</description>
 | 
			
		||||
    <import file="nbproject/build-impl.xml"/>
 | 
			
		||||
    <!--
 | 
			
		||||
 | 
			
		||||
    There exist several targets which are by default empty and which can be 
 | 
			
		||||
    used for execution of your tasks. These targets are usually executed 
 | 
			
		||||
    before and after some main targets. They are: 
 | 
			
		||||
 | 
			
		||||
      -pre-init:                 called before initialization of project properties
 | 
			
		||||
      -post-init:                called after initialization of project properties
 | 
			
		||||
      -pre-compile:              called before javac compilation
 | 
			
		||||
      -post-compile:             called after javac compilation
 | 
			
		||||
      -pre-compile-single:       called before javac compilation of single file
 | 
			
		||||
      -post-compile-single:      called after javac compilation of single file
 | 
			
		||||
      -pre-compile-test:         called before javac compilation of JUnit tests
 | 
			
		||||
      -post-compile-test:        called after javac compilation of JUnit tests
 | 
			
		||||
      -pre-compile-test-single:  called before javac compilation of single JUnit test
 | 
			
		||||
      -post-compile-test-single: called after javac compilation of single JUunit test
 | 
			
		||||
      -pre-jar:                  called before JAR building
 | 
			
		||||
      -post-jar:                 called after JAR building
 | 
			
		||||
      -post-clean:               called after cleaning build products
 | 
			
		||||
 | 
			
		||||
    (Targets beginning with '-' are not intended to be called on their own.)
 | 
			
		||||
 | 
			
		||||
    Example of inserting an obfuscator after compilation could look like this:
 | 
			
		||||
 | 
			
		||||
        <target name="-post-compile">
 | 
			
		||||
            <obfuscate>
 | 
			
		||||
                <fileset dir="${build.classes.dir}"/>
 | 
			
		||||
            </obfuscate>
 | 
			
		||||
        </target>
 | 
			
		||||
 | 
			
		||||
    For list of available properties check the imported 
 | 
			
		||||
    nbproject/build-impl.xml file. 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    Another way to customize the build is by overriding existing main targets.
 | 
			
		||||
    The targets of interest are: 
 | 
			
		||||
 | 
			
		||||
      -init-macrodef-javac:     defines macro for javac compilation
 | 
			
		||||
      -init-macrodef-junit:     defines macro for junit execution
 | 
			
		||||
      -init-macrodef-debug:     defines macro for class debugging
 | 
			
		||||
      -init-macrodef-java:      defines macro for class execution
 | 
			
		||||
      -do-jar:                  JAR building
 | 
			
		||||
      run:                      execution of project 
 | 
			
		||||
      -javadoc-build:           Javadoc generation
 | 
			
		||||
      test-report:              JUnit report generation
 | 
			
		||||
 | 
			
		||||
    An example of overriding the target for project execution could look like this:
 | 
			
		||||
 | 
			
		||||
        <target name="run" depends="Actividad31-impl.jar">
 | 
			
		||||
            <exec dir="bin" executable="launcher.exe">
 | 
			
		||||
                <arg file="${dist.jar}"/>
 | 
			
		||||
            </exec>
 | 
			
		||||
        </target>
 | 
			
		||||
 | 
			
		||||
    Notice that the overridden target depends on the jar target and not only on 
 | 
			
		||||
    the compile target as the regular run target does. Again, for a list of available 
 | 
			
		||||
    properties which you can use, check the target you are overriding in the
 | 
			
		||||
    nbproject/build-impl.xml file. 
 | 
			
		||||
 | 
			
		||||
    -->
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										4
									
								
								Actividad31/build/built-jar.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								Actividad31/build/built-jar.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,4 @@
 | 
			
		||||
#Mon, 11 Mar 2024 18:54:03 +0100
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/home/DAM2024/PSP03_Tarea/Actividad31=
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Actividad31.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Actividad31.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Aplicaciones/Cliente.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Aplicaciones/Cliente.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Drivers/Terminal$1.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Drivers/Terminal$1.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Drivers/Terminal.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Actividad31/build/classes/actividad31/Drivers/Terminal.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								Actividad31/dist/Actividad31.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								Actividad31/dist/Actividad31.jar
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										32
									
								
								Actividad31/dist/README.TXT
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								Actividad31/dist/README.TXT
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,32 @@
 | 
			
		||||
========================
 | 
			
		||||
BUILD OUTPUT DESCRIPTION
 | 
			
		||||
========================
 | 
			
		||||
 | 
			
		||||
When you build an Java application project that has a main class, the IDE
 | 
			
		||||
automatically copies all of the JAR
 | 
			
		||||
files on the projects classpath to your projects dist/lib folder. The IDE
 | 
			
		||||
also adds each of the JAR files to the Class-Path element in the application
 | 
			
		||||
JAR files manifest file (MANIFEST.MF).
 | 
			
		||||
 | 
			
		||||
To run the project from the command line, go to the dist folder and
 | 
			
		||||
type the following:
 | 
			
		||||
 | 
			
		||||
java -jar "Actividad31.jar" 
 | 
			
		||||
 | 
			
		||||
To distribute this project, zip up the dist folder (including the lib folder)
 | 
			
		||||
and distribute the ZIP file.
 | 
			
		||||
 | 
			
		||||
Notes:
 | 
			
		||||
 | 
			
		||||
* If two JAR files on the project classpath have the same name, only the first
 | 
			
		||||
JAR file is copied to the lib folder.
 | 
			
		||||
* Only JAR files are copied to the lib folder.
 | 
			
		||||
If the classpath contains other types of files or folders, these files (folders)
 | 
			
		||||
are not copied.
 | 
			
		||||
* If a library on the projects classpath also has a Class-Path element
 | 
			
		||||
specified in the manifest,the content of the Class-Path element has to be on
 | 
			
		||||
the projects runtime path.
 | 
			
		||||
* To set a main class in a standard Java project, right-click the project node
 | 
			
		||||
in the Projects window and choose Properties. Then click Run and enter the
 | 
			
		||||
class name in the Main Class field. Alternatively, you can manually type the
 | 
			
		||||
class name in the manifest Main-Class element.
 | 
			
		||||
							
								
								
									
										3
									
								
								Actividad31/manifest.mf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								Actividad31/manifest.mf
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
Manifest-Version: 1.0
 | 
			
		||||
X-COMMENT: Main-Class will be added automatically by build
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1771
									
								
								Actividad31/nbproject/build-impl.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1771
									
								
								Actividad31/nbproject/build-impl.xml
									
									
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										8
									
								
								Actividad31/nbproject/genfiles.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Actividad31/nbproject/genfiles.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,8 @@
 | 
			
		||||
build.xml.data.CRC32=6e889fd8
 | 
			
		||||
build.xml.script.CRC32=7a5578bc
 | 
			
		||||
build.xml.stylesheet.CRC32=f85dc8f2@1.110.0.48
 | 
			
		||||
# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
 | 
			
		||||
# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
 | 
			
		||||
nbproject/build-impl.xml.data.CRC32=6e889fd8
 | 
			
		||||
nbproject/build-impl.xml.script.CRC32=09e79c3a
 | 
			
		||||
nbproject/build-impl.xml.stylesheet.CRC32=12e0a6c2@1.110.0.48
 | 
			
		||||
							
								
								
									
										2
									
								
								Actividad31/nbproject/private/private.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								Actividad31/nbproject/private/private.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
compile.on.save=true
 | 
			
		||||
user.properties.file=/home/kyman/snap/netbeans/93/build.properties
 | 
			
		||||
							
								
								
									
										95
									
								
								Actividad31/nbproject/project.properties
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										95
									
								
								Actividad31/nbproject/project.properties
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,95 @@
 | 
			
		||||
annotation.processing.enabled=true
 | 
			
		||||
annotation.processing.enabled.in.editor=false
 | 
			
		||||
annotation.processing.processor.options=
 | 
			
		||||
annotation.processing.processors.list=
 | 
			
		||||
annotation.processing.run.all.processors=true
 | 
			
		||||
annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output
 | 
			
		||||
build.classes.dir=${build.dir}/classes
 | 
			
		||||
build.classes.excludes=**/*.java,**/*.form
 | 
			
		||||
# This directory is removed when the project is cleaned:
 | 
			
		||||
build.dir=build
 | 
			
		||||
build.generated.dir=${build.dir}/generated
 | 
			
		||||
build.generated.sources.dir=${build.dir}/generated-sources
 | 
			
		||||
# Only compile against the classpath explicitly listed here:
 | 
			
		||||
build.sysclasspath=ignore
 | 
			
		||||
build.test.classes.dir=${build.dir}/test/classes
 | 
			
		||||
build.test.results.dir=${build.dir}/test/results
 | 
			
		||||
# Uncomment to specify the preferred debugger connection transport:
 | 
			
		||||
#debug.transport=dt_socket
 | 
			
		||||
debug.classpath=\
 | 
			
		||||
    ${run.classpath}
 | 
			
		||||
debug.modulepath=\
 | 
			
		||||
    ${run.modulepath}
 | 
			
		||||
debug.test.classpath=\
 | 
			
		||||
    ${run.test.classpath}
 | 
			
		||||
debug.test.modulepath=\
 | 
			
		||||
    ${run.test.modulepath}
 | 
			
		||||
# Files in build.classes.dir which should be excluded from distribution jar
 | 
			
		||||
dist.archive.excludes=
 | 
			
		||||
# This directory is removed when the project is cleaned:
 | 
			
		||||
dist.dir=dist
 | 
			
		||||
dist.jar=${dist.dir}/Actividad31.jar
 | 
			
		||||
dist.javadoc.dir=${dist.dir}/javadoc
 | 
			
		||||
dist.jlink.dir=${dist.dir}/jlink
 | 
			
		||||
dist.jlink.output=${dist.jlink.dir}/Actividad31
 | 
			
		||||
excludes=
 | 
			
		||||
includes=**
 | 
			
		||||
jar.compress=false
 | 
			
		||||
javac.classpath=
 | 
			
		||||
# Space-separated list of extra javac options
 | 
			
		||||
javac.compilerargs=
 | 
			
		||||
javac.deprecation=false
 | 
			
		||||
javac.external.vm=true
 | 
			
		||||
javac.modulepath=
 | 
			
		||||
javac.processormodulepath=
 | 
			
		||||
javac.processorpath=\
 | 
			
		||||
    ${javac.classpath}
 | 
			
		||||
javac.source=19
 | 
			
		||||
javac.target=19
 | 
			
		||||
javac.test.classpath=\
 | 
			
		||||
    ${javac.classpath}:\
 | 
			
		||||
    ${build.classes.dir}
 | 
			
		||||
javac.test.modulepath=\
 | 
			
		||||
    ${javac.modulepath}
 | 
			
		||||
javac.test.processorpath=\
 | 
			
		||||
    ${javac.test.classpath}
 | 
			
		||||
javadoc.additionalparam=
 | 
			
		||||
javadoc.author=false
 | 
			
		||||
javadoc.encoding=${source.encoding}
 | 
			
		||||
javadoc.html5=false
 | 
			
		||||
javadoc.noindex=false
 | 
			
		||||
javadoc.nonavbar=false
 | 
			
		||||
javadoc.notree=false
 | 
			
		||||
javadoc.private=false
 | 
			
		||||
javadoc.splitindex=true
 | 
			
		||||
javadoc.use=true
 | 
			
		||||
javadoc.version=false
 | 
			
		||||
javadoc.windowtitle=
 | 
			
		||||
# The jlink additional root modules to resolve
 | 
			
		||||
jlink.additionalmodules=
 | 
			
		||||
# The jlink additional command line parameters
 | 
			
		||||
jlink.additionalparam=
 | 
			
		||||
jlink.launcher=true
 | 
			
		||||
jlink.launcher.name=Actividad31
 | 
			
		||||
main.class=actividad31.Actividad31
 | 
			
		||||
manifest.file=manifest.mf
 | 
			
		||||
meta.inf.dir=${src.dir}/META-INF
 | 
			
		||||
mkdist.disabled=false
 | 
			
		||||
platform.active=default_platform
 | 
			
		||||
run.classpath=\
 | 
			
		||||
    ${javac.classpath}:\
 | 
			
		||||
    ${build.classes.dir}
 | 
			
		||||
# Space-separated list of JVM arguments used when running the project.
 | 
			
		||||
# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value.
 | 
			
		||||
# To set system properties for unit tests define test-sys-prop.name=value:
 | 
			
		||||
run.jvmargs=
 | 
			
		||||
run.modulepath=\
 | 
			
		||||
    ${javac.modulepath}
 | 
			
		||||
run.test.classpath=\
 | 
			
		||||
    ${javac.test.classpath}:\
 | 
			
		||||
    ${build.test.classes.dir}
 | 
			
		||||
run.test.modulepath=\
 | 
			
		||||
    ${javac.test.modulepath}
 | 
			
		||||
source.encoding=UTF-8
 | 
			
		||||
src.dir=src
 | 
			
		||||
test.src.dir=test
 | 
			
		||||
							
								
								
									
										15
									
								
								Actividad31/nbproject/project.xml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								Actividad31/nbproject/project.xml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://www.netbeans.org/ns/project/1">
 | 
			
		||||
    <type>org.netbeans.modules.java.j2seproject</type>
 | 
			
		||||
    <configuration>
 | 
			
		||||
        <data xmlns="http://www.netbeans.org/ns/j2se-project/3">
 | 
			
		||||
            <name>Actividad31</name>
 | 
			
		||||
            <source-roots>
 | 
			
		||||
                <root id="src.dir"/>
 | 
			
		||||
            </source-roots>
 | 
			
		||||
            <test-roots>
 | 
			
		||||
                <root id="test.src.dir"/>
 | 
			
		||||
            </test-roots>
 | 
			
		||||
        </data>
 | 
			
		||||
    </configuration>
 | 
			
		||||
</project>
 | 
			
		||||
							
								
								
									
										76
									
								
								Actividad31/src/actividad31/Actividad31.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								Actividad31/src/actividad31/Actividad31.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,76 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Main.java to edit this template
 | 
			
		||||
 */
 | 
			
		||||
package actividad31;
 | 
			
		||||
 | 
			
		||||
import actividad31.Aplicaciones.Cliente;
 | 
			
		||||
import actividad31.Aplicaciones.Servidor;
 | 
			
		||||
import actividad31.Drivers.Terminal;
 | 
			
		||||
import java.util.Arrays;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kyman
 | 
			
		||||
 */
 | 
			
		||||
public class Actividad31 {
 | 
			
		||||
    
 | 
			
		||||
    // Configuración.
 | 
			
		||||
    public static final int puerto = 2000;
 | 
			
		||||
    public static final String host = "localhost";
 | 
			
		||||
    public static final int[] rango_aleatorio = {0, 100};
 | 
			
		||||
    public static final String modo_por_defecto = "servidor";
 | 
			
		||||
    // Configuración.
 | 
			
		||||
    
 | 
			
		||||
    public static boolean trabajando = true;
 | 
			
		||||
    public static Servidor servidor = null;
 | 
			
		||||
    public static Cliente cliente = null;
 | 
			
		||||
    public static Terminal terminal = null;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param args the command line arguments
 | 
			
		||||
     */
 | 
			
		||||
    public static void main(String[] args) {
 | 
			
		||||
        // TODO code application logic here
 | 
			
		||||
        
 | 
			
		||||
        String accion = args.length != 0 ? args[0] : modo_por_defecto;
 | 
			
		||||
        
 | 
			
		||||
        if(accion != null){
 | 
			
		||||
            switch(accion){
 | 
			
		||||
                case "servidor", "server" -> crear_servidor();
 | 
			
		||||
                case "cliente", "client" -> crear_cliente();
 | 
			
		||||
                default -> System.out.println("La acción '" + accion + "' existe. Por favor, indique si quiere lanzar el servidor o el cliente simplemente indicando 'servidor' o 'cliente'.");
 | 
			
		||||
            }
 | 
			
		||||
        }else 
 | 
			
		||||
            System.out.println("Por favor, indique si quiere arrancar como servidor o como cliente con las palabras clave 'servidor' o 'cliente'.");
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private static void crear_servidor(){
 | 
			
		||||
        
 | 
			
		||||
        terminal = new Terminal(servidor = new Servidor());
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private static void crear_cliente(){
 | 
			
		||||
        
 | 
			
		||||
        terminal = new Terminal(cliente = new Cliente());
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static void excepcion(Exception excepcion){
 | 
			
		||||
        System.out.println(excepcion.getMessage());
 | 
			
		||||
        System.out.println(Arrays.toString(excepcion.getStackTrace()));
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public static void cerrar(){
 | 
			
		||||
        trabajando = false;
 | 
			
		||||
        if(servidor != null)
 | 
			
		||||
            servidor.cerrar();
 | 
			
		||||
        if(cliente != null)
 | 
			
		||||
            cliente.cerrar();
 | 
			
		||||
        if(terminal != null)
 | 
			
		||||
            terminal.cerrar();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										111
									
								
								Actividad31/src/actividad31/Aplicaciones/Cliente.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								Actividad31/src/actividad31/Aplicaciones/Cliente.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,111 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 | 
			
		||||
 */
 | 
			
		||||
package actividad31.Aplicaciones;
 | 
			
		||||
 | 
			
		||||
import actividad31.Actividad31;
 | 
			
		||||
import actividad31.Drivers.Terminal;
 | 
			
		||||
import actividad31.Interfaces.Terminalnterfaz;
 | 
			
		||||
import java.io.BufferedReader;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStreamReader;
 | 
			
		||||
import java.io.PrintWriter;
 | 
			
		||||
import java.net.Socket;
 | 
			
		||||
import java.util.logging.Level;
 | 
			
		||||
import java.util.logging.Logger;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kyman
 | 
			
		||||
 */
 | 
			
		||||
public class Cliente implements Terminalnterfaz {
 | 
			
		||||
    
 | 
			
		||||
    private Socket socket;
 | 
			
		||||
    private PrintWriter salida;
 | 
			
		||||
    
 | 
			
		||||
    public Cliente(){
 | 
			
		||||
        System.out.println("Lanzando cliente.");
 | 
			
		||||
        
 | 
			
		||||
        try{
 | 
			
		||||
            
 | 
			
		||||
            socket = new Socket(Actividad31.host, Actividad31.puerto);
 | 
			
		||||
            BufferedReader lectura = new BufferedReader(new InputStreamReader(socket.getInputStream()));
 | 
			
		||||
            salida = new PrintWriter(socket.getOutputStream());
 | 
			
		||||
            
 | 
			
		||||
            new Thread(new Runnable(){
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    
 | 
			
		||||
                    String mensaje;
 | 
			
		||||
                    
 | 
			
		||||
                    try {
 | 
			
		||||
                        while((mensaje = lectura.readLine()) != null)
 | 
			
		||||
                            System.out.println(mensaje);
 | 
			
		||||
                    } catch (IOException excepcion) {
 | 
			
		||||
                        Actividad31.excepcion(excepcion);
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    Actividad31.cerrar();
 | 
			
		||||
 | 
			
		||||
                }
 | 
			
		||||
            }).start();
 | 
			
		||||
            
 | 
			
		||||
        } catch (IOException excepcion) {
 | 
			
		||||
            // Actividad31.excepcion(excepcion);
 | 
			
		||||
            System.out.println("No se pudo conectar contra el servidor '" + Actividad31.host + ":" + Actividad31.puerto + ". Comprueba que el servidor esté lanzado en ese host.");
 | 
			
		||||
            Actividad31.cerrar();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean terminal(String comando) {
 | 
			
		||||
        
 | 
			
		||||
        boolean estado = false;
 | 
			
		||||
        
 | 
			
		||||
        try{
 | 
			
		||||
            
 | 
			
		||||
            int numero = Integer.parseInt(comando);
 | 
			
		||||
            
 | 
			
		||||
            enviar("" + numero);
 | 
			
		||||
            estado = true;
 | 
			
		||||
            
 | 
			
		||||
        }catch(Exception excepcion){}
 | 
			
		||||
        
 | 
			
		||||
        return estado;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void cerrar() {
 | 
			
		||||
        
 | 
			
		||||
        try {
 | 
			
		||||
            if(salida != null)
 | 
			
		||||
                salida.close();
 | 
			
		||||
            socket.close();
 | 
			
		||||
        } catch (IOException excepcion) {
 | 
			
		||||
            Actividad31.excepcion(excepcion);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean enviar(String mensaje){
 | 
			
		||||
        
 | 
			
		||||
        boolean estado = false;
 | 
			
		||||
        
 | 
			
		||||
        try{
 | 
			
		||||
            new Thread(new Runnable(){
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    salida.println(mensaje);
 | 
			
		||||
                    salida.flush();
 | 
			
		||||
                }
 | 
			
		||||
            }).start();
 | 
			
		||||
        }catch(Exception excepcion){
 | 
			
		||||
            Actividad31.excepcion(excepcion);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return estado;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										184
									
								
								Actividad31/src/actividad31/Aplicaciones/Servidor.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										184
									
								
								Actividad31/src/actividad31/Aplicaciones/Servidor.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,184 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 | 
			
		||||
 */
 | 
			
		||||
package actividad31.Aplicaciones;
 | 
			
		||||
 | 
			
		||||
import actividad31.Actividad31;
 | 
			
		||||
import actividad31.Drivers.Terminal;
 | 
			
		||||
import java.io.BufferedReader;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.io.InputStreamReader;
 | 
			
		||||
import java.io.PrintWriter;
 | 
			
		||||
import java.net.ServerSocket;
 | 
			
		||||
import java.net.Socket;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import actividad31.Interfaces.Terminalnterfaz;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kyman
 | 
			
		||||
 */
 | 
			
		||||
public class Servidor implements Terminalnterfaz {
 | 
			
		||||
    
 | 
			
		||||
    private ServerSocket socket;
 | 
			
		||||
    private ArrayList<Socket> clientes = new ArrayList<>();
 | 
			
		||||
    private ArrayList<PrintWriter> salidas = new ArrayList<>();
 | 
			
		||||
    private int numero_aleatorio = 0;
 | 
			
		||||
    
 | 
			
		||||
    public Servidor(){
 | 
			
		||||
        System.out.println("Lanzando el servidor.");
 | 
			
		||||
        
 | 
			
		||||
        new Thread(new Runnable(){
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                try{
 | 
			
		||||
                    
 | 
			
		||||
                    socket = new ServerSocket(Actividad31.puerto);
 | 
			
		||||
                    
 | 
			
		||||
                    while(Actividad31.trabajando){
 | 
			
		||||
                        
 | 
			
		||||
                        Socket cliente = socket.accept();
 | 
			
		||||
                        int i = 0;
 | 
			
		||||
                        int l = clientes.size();
 | 
			
		||||
                        PrintWriter salida = new PrintWriter(cliente.getOutputStream());
 | 
			
		||||
                        
 | 
			
		||||
                        for(; i < l; i ++)
 | 
			
		||||
                            if(clientes.get(i) == null)
 | 
			
		||||
                                break;
 | 
			
		||||
                        
 | 
			
		||||
                        if(i == l){
 | 
			
		||||
                            clientes.add(cliente);
 | 
			
		||||
                            salidas.add(salida);
 | 
			
		||||
                        }else{
 | 
			
		||||
                            clientes.set(i, cliente);
 | 
			
		||||
                            salidas.set(i, salida);
 | 
			
		||||
                        }
 | 
			
		||||
                        
 | 
			
		||||
                        System.out.println("Escuchando al cliente '" + i + "'.");
 | 
			
		||||
                        
 | 
			
		||||
                        escuchar(i, new BufferedReader(new InputStreamReader(cliente.getInputStream())));
 | 
			
		||||
                        
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                } catch (IOException excepcion) {
 | 
			
		||||
                    Actividad31.excepcion(excepcion);
 | 
			
		||||
                    Actividad31.cerrar();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
        }).start();
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean terminal(String comando) {
 | 
			
		||||
        
 | 
			
		||||
        boolean estado = true;
 | 
			
		||||
        
 | 
			
		||||
        switch(comando){
 | 
			
		||||
            case "regenerar" -> {
 | 
			
		||||
                numero_aleatorio = (int)(Math.random() * (Actividad31.rango_aleatorio[1] + 1 - Actividad31.rango_aleatorio[0])) - Actividad31.rango_aleatorio[0];
 | 
			
		||||
                System.out.println("El nuevo número aleatorio es '" + numero_aleatorio + "'.");
 | 
			
		||||
            }
 | 
			
		||||
            default -> estado = false;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return estado;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public void cerrar() {
 | 
			
		||||
        
 | 
			
		||||
        for(int i = 0, l = clientes.size(); i < l; i ++){
 | 
			
		||||
           
 | 
			
		||||
            Socket cliente = clientes.get(i);
 | 
			
		||||
 | 
			
		||||
            if(cliente != null){
 | 
			
		||||
                
 | 
			
		||||
                PrintWriter salida = salidas.get(i);
 | 
			
		||||
                
 | 
			
		||||
                try {
 | 
			
		||||
                    
 | 
			
		||||
                    if(salida != null){
 | 
			
		||||
                        salida.close();
 | 
			
		||||
                        salidas.set(i, null);
 | 
			
		||||
                    }
 | 
			
		||||
                    
 | 
			
		||||
                    cliente.close();
 | 
			
		||||
                    clientes.set(i, null);
 | 
			
		||||
                    
 | 
			
		||||
                } catch (IOException excepcion) {
 | 
			
		||||
                    Actividad31.excepcion(excepcion);
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
                
 | 
			
		||||
        }
 | 
			
		||||
                
 | 
			
		||||
        try{
 | 
			
		||||
            socket.close();
 | 
			
		||||
        } catch (IOException excepcion) {
 | 
			
		||||
            Actividad31.excepcion(excepcion);
 | 
			
		||||
        }     
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public boolean enviar(int i, String mensaje){
 | 
			
		||||
        
 | 
			
		||||
        boolean exito = false;
 | 
			
		||||
        PrintWriter salida;
 | 
			
		||||
        
 | 
			
		||||
        try{
 | 
			
		||||
            salida = salidas.get(i);
 | 
			
		||||
            new Thread(new Runnable() {
 | 
			
		||||
                @Override
 | 
			
		||||
                public void run() {
 | 
			
		||||
                    salida.println(mensaje);
 | 
			
		||||
                    salida.flush();
 | 
			
		||||
                }
 | 
			
		||||
            }).start();
 | 
			
		||||
            exito = true;
 | 
			
		||||
        }catch(Exception excepcion){
 | 
			
		||||
            Actividad31.excepcion(excepcion);
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        return exito;
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    private void escuchar(int i, BufferedReader entrada){
 | 
			
		||||
        new Thread(new Runnable() {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                
 | 
			
		||||
                String mensaje;
 | 
			
		||||
                
 | 
			
		||||
                try{
 | 
			
		||||
                    while((mensaje = entrada.readLine()) != null)
 | 
			
		||||
                        switch(mensaje){
 | 
			
		||||
                            default -> {
 | 
			
		||||
                                try{
 | 
			
		||||
                                    
 | 
			
		||||
                                    int valor = Integer.parseInt(mensaje.trim());
 | 
			
		||||
                                    
 | 
			
		||||
                                    if(valor == numero_aleatorio)
 | 
			
		||||
                                        enviar(i, "¡¡Has acertado!! El número es " + valor + ".");
 | 
			
		||||
                                    else if(valor < numero_aleatorio)
 | 
			
		||||
                                        enviar(i, "El número es mayor que '" + valor + "'.");
 | 
			
		||||
                                    else 
 | 
			
		||||
                                        enviar(i, "El número es menor que '" + valor + "'.");
 | 
			
		||||
                                    
 | 
			
		||||
                                }catch(Exception excepcion){
 | 
			
		||||
                                    Actividad31.excepcion(excepcion);
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        }
 | 
			
		||||
                    entrada.close();
 | 
			
		||||
                } catch (IOException excepcion) {
 | 
			
		||||
                    Actividad31.excepcion(excepcion);
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }).start();
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										58
									
								
								Actividad31/src/actividad31/Drivers/Terminal.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								Actividad31/src/actividad31/Drivers/Terminal.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 | 
			
		||||
 */
 | 
			
		||||
package actividad31.Drivers;
 | 
			
		||||
 | 
			
		||||
import actividad31.Actividad31;
 | 
			
		||||
import actividad31.Interfaces.Terminalnterfaz;
 | 
			
		||||
import java.util.Scanner;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kyman
 | 
			
		||||
 */
 | 
			
		||||
public class Terminal {
 | 
			
		||||
    
 | 
			
		||||
    private boolean activo = true;
 | 
			
		||||
    
 | 
			
		||||
    public Terminal(Terminalnterfaz padre){
 | 
			
		||||
        
 | 
			
		||||
        if(!Actividad31.trabajando){
 | 
			
		||||
            activo = false;
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        System.out.println("Lanzando terminal.");
 | 
			
		||||
        
 | 
			
		||||
        new Thread(new Runnable(){
 | 
			
		||||
            @Override
 | 
			
		||||
            public void run() {
 | 
			
		||||
                
 | 
			
		||||
                Scanner entrada = new Scanner(System.in);
 | 
			
		||||
                String comando;
 | 
			
		||||
                
 | 
			
		||||
                while(Actividad31.trabajando)
 | 
			
		||||
                    switch(comando = entrada.nextLine()){
 | 
			
		||||
                        case "cerrar", "terminar", "close", "exit", "salir", "bye" -> {
 | 
			
		||||
                            Actividad31.trabajando = false;
 | 
			
		||||
                            padre.cerrar();
 | 
			
		||||
                        }
 | 
			
		||||
                        default -> {
 | 
			
		||||
                            if(!padre.terminal(comando) && Actividad31.trabajando)
 | 
			
		||||
                                System.out.println("El comando '" + comando + "' no existe.");
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                activo = false;
 | 
			
		||||
                
 | 
			
		||||
            }
 | 
			
		||||
        }).start();
 | 
			
		||||
        
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    public void cerrar(){
 | 
			
		||||
        if(activo)
 | 
			
		||||
            System.out.println("Por favor, presione cualquier tecla para terminar de cerrar la aplicación.");
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										16
									
								
								Actividad31/src/actividad31/Interfaces/Terminalnterfaz.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								Actividad31/src/actividad31/Interfaces/Terminalnterfaz.java
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
 | 
			
		||||
 * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
 | 
			
		||||
 */
 | 
			
		||||
package actividad31.Interfaces;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 *
 | 
			
		||||
 * @author kyman
 | 
			
		||||
 */
 | 
			
		||||
public interface Terminalnterfaz {
 | 
			
		||||
    
 | 
			
		||||
    public boolean terminal(String comando);
 | 
			
		||||
    public void cerrar();
 | 
			
		||||
    
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user