Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PROFESOR:
MARGARITA AVELLANEDA
INTEGRANTES DEL GRUPO:
INSTITUCIÓN UNIVERSITARIA POLITÉCNICO GRANCOLOMBIANO
FACULTAD DE INGENIERÍA
INGENIERÍA DE SOFTWARE
JUNIO 2, 2020
TABLA DE CONTENIDOS
Diseñar un modelo transaccional para una entidad bancaria, haciendo aplicación de los
protocolos de comunicación sockets y de una base de datos para llevar a cabo las
ejecución de tres transacciones a saber, una consulta, una consignación y un retiro. Para
Hacer un modelo entidad relación sencillo del banco XYZ, con las entidades de saldo,
Implementar el modelo en una base de datos libre como Oracle 11g R2 Express, por
ejemplo.
Desarrollar los sockets server y cliente respectivos para hacer una consignación
Probar las operaciones desde el socket cliente con el socket server iniciado.
III. ENTREGA 1
a. Entidades y atributos
A continuación, detallamos las entidades y atributos identificados para la
determinar la cardinalidad:
a un cliente específico.
1:N
(1,1) (N,1)
Clientes Generan Movimientos
3. Cada cliente puede consultar varios saldos (si tiene varias cuentas), pero el
1:N
(1,1) (N,1)
Clientes consulta Saldos
4. Cada cliente tiene una ciudad relacionada, una ciudad tiene varios clientes.
N:1
(1,N) (1,1)
Clientes tiene Ciudad
N:1
(1,N) (1,1)
pertenecee
Ciudad país
e
Luego de consultar con todos los integrantes del grupo, se decide trabajar la
implementación de la base de datos con MySQL, dado que es una de las herramientas
encontrar información acerca del uso de esta herramienta se convierte en una tarea
de Oracle. Para nuestro caso particular se configura MySQL Workbench para poder
trabajarlo localmente.
de trabajo, se usa la herramienta de crear nuevas tablas para ingresar las entidades y
atributos.
Además de los nombres, a los atributos se les debe de indicar ciertas características
dependiendo del rol que cumplan dentro de la entidad y del tipo de datos que van a
recibir. Los más usados son INT para enteros, VARCHAR () para caracteres variables
necesitan de un número consecutivo cada vez que se ingresa un nuevo dato, entonces
función que indica de manera obligatoria el ingreso de datos, pues dicho espacio no
¿Qué es un Socket?
Tipos de sockets
Existen dos tipos de socket: socket stream y socket datagram, según (Pereria, 2019), existe una tercera
categoría sockets raw, para los interesados en desarrollar nuevos protocolos de comunicación, en (Murillo
Morera & Juan de Dios, 2010) define que socket stream está orientado a la conexión y el datagrama es no
orientado a la conexión, básicamente el socket stream está orientado al protocolo TCP que garantiza el
envío de toda la data y en el mismos orden de envío, y para el socket datagram está orientado al protocolo
UDP que no garantiza que los paquetes de data lleguen pero es más rápido comparado con TCP.
Es decir, para analizar la creación de los sockets debemos tener en cuenta el protocolo y de qué lado se
encuentra es decir si es servidor o es cliente.
Creación de Sockets en Java
A. Constructores:
public ServerSocket (int port) throws IOException: Se crea un socket local al que se enlaza el puerto
especificado en el parámetro port, si se especifica un 0 en dicho parámetro creará el socket en cualquier
puerto disponible. Puede aceptar hasta 50 peticiones en cola pendientes de conexión por parte de los
clientes.
public ServerSocket (int port , int count) throws IOException: Aquí, el parámetro count sirve para que
puede especificarse, el número máximo de peticiones de conexión que se pueden mantener en cola.
Hay que recordar, que es fundamental que el puerto escogido sea conocido por el cliente, en caso
contrario, no se podría establecer la conexión.
B. Métodos:
public Socket accept () throws IOException: Sobre un ServerSocket se puede realizar una espera de
conexión por parte del cliente mediante el método accept(). Hay que decir, que este método es de
bloqueo, el proceso espera a que se realice una conexión por parte del cliente para seguir su ejecución.
Una vez que se ha establecido una conexión por el cliente, este método devolverá un objeto tipo Socket, a
través del cual se establecerá la comunicación con el cliente.
public void close () throws IOException: Se encarga de cerrar el socket.
public InetAddress getInetAddress (): Retorna la dirección IP remota a la cual está conectado el socket. Si
no lo está retornará null .
public int getLocalPort (): Retorna el puerto en el que está escuchando el socket.
public static void setSocketImplFactory (SocketImplFactory fac) throws IOException: Este método
establece la compañía de implementación del socket para la aplicación. Debido a que cuando una
aplicación crea un nuevo socket, se realiza una llamada al método createSocketImpl() de la compañía que
implementa al socket. Es por tanto en el parámetro fac, donde se especificará la citada compañía.
public String toString( ) Retorna un string representando el socket.
A. Constructores:
public Socket (InetAddress address, int port) throws IOException: Crea un StreamSocket y lo conecta al
puerto remoto y dirección IP remota especificados.
public Socket (InetAddress address, int port, boolean stream) throws IOException Ídem a la anterior
incluyendo el parámetro booleano stream que si es true creará un StreamSocket y si es false un
DatagramSocket (En desuso).
public Socket (String host, int port) throws UnKnownHostException, IOException: Crea un
StreamSocket y lo conecta al número de puerto y al nombre de host especificados.
public Socket (String host, int port , boolean stream) throws IOException: Ídem al anterior incluyendo el
parámetro booleano stream que si es true creará un StreamSocket y si es
false un DatagramSocket (En desuso).
B. Métodos:
public void close() throws IOException: Se encarga de cerrar el socket.
public InetAddress getInetAddress (): Retorna la dirección IP remota a la que se conecta el socket.
public InputStream getInputStream () throws IOException: Retorna un input stream para la lectura de
bytes desde el socket.
public int getLocalPort(): Retorna el puerto local al que está conectado el socket.
public OutputStream getOutputStream () throws IOException: Retorna un output stream para la escritura
de bytes hacia el socket.
public int getPort (): Retorna el puerto remoto al que está conectado el socket.
public static void setSocketImplFactory (SocketImplFactory fac) throws IOException: Este método
establece la compañía de implementación del socket para la aplicación. Debido a que cuando una
aplicación crea un nuevo socket, se realiza una llamada al método createSocketImpl( ) de la compañía que
implementa al socket. Es por tanto en el parámetro fac , donde especificaremos la citada compañía.
Según (Belmonte Fernandez & Óscar) para el protocolo UDP en el lado del servidor tenemos que:
Utilizar el constructor de la clase DatagramSocket que recibe como parámetro el puerto de conexión
public DatagramSocket(int puerto). Una vez creado el Socket UDP, la clase DatagramSocket nos
permitirá tanto enviar como recibir paquetes en el puerto indicado.
Para enviar un paquete como contestación al cliente del que se acaba de recibir un paquete creamos una
nueva instancia de la clase DatagramPacket pero esta vez utilizando el constructor que incluye un tercer
parametro con la dirección de destino del paquete public DatagramPacket(byte[] buffer, int tamBuffer,
SocketAddress direccion).
Es posible utilizar la misma instancia de la clase DatagramSocket para enviar datos. La dirección a la cual
se debe enviar el paquete la obtiene la clase DatagramSocket a partir de la clase DatagramPacket.
Según (Belmonte Fernandez & Óscar) para el protocolo UDP en el lado del cliente tenemos que:
Para escribir un cliente utilizando el protocolo UDP utilizamos de nuevo las clases DatagramPacket y
DatagramSocket, pero esta vez, al crear una instancia de DatagramPacket, indicamos la dirección y el
puerto del servidor al que queremos hacer llegar el paquete, por ejemplo new DatagramPacket(new
byte[1], 1, inetAddress, 12345). Para crear la instancia de DatagramSocket utilizaremos el constructor por
defecto new DatagramSocket(). Finalmente, para enviar el paquete utilizaremos de nuevo el método
send(paquete) de la clase DatagramSocket.
Así mismo indica que: al igual que en el lado del servidor el cliente puede quedar a la escucha de los
paquetes que reciba del servidor.
Socket UDP
A. Constructores:
public DatagramSocket () throws SocketException: Se encarga de construir un socket para datagramas y
de conectarlo al primer puerto disponible.
public DatagramSocket (int port) throws SocketExceptionÍdem: Con la salvedad de que permite
especificar el número de puerto asociado.
public DatagramSocket (int port, InetAddress ip) throws SocketException: Permite especificar, además
del puerto, la dirección local a la que se va a asociar el socket.
B. Métodos:
public void close(): Cierra el socket.
protected void finalize(): Asegura el cierre del socket si no existen más referencias al mismo.
public int getLocalPort(): Retorna el número de puerto en el host local al que está conectado el socket.
public void receive (DatagramPacket p) throws IOException: Recibe un DatagramPacket del socket, y
llena el búfer con los datos que recibe.
public void send (DatagramPacket p) throws IOException: Envía un DatagramPacket a través del socket.
Datagram Packet
B. Métodos:
public InetAddress getAddress (): Retorna la dirección IP del host al cual se le envía el datagrama o del
que el datagrama se recibió.
public byte[] getData(): Retorna los datos a recibir o a enviar.
public int getLength(): Retorna la longitud de los datos a enviar o a recibir.
public int getPort(): Retorna el número de puerto de la máquina remota a la que se le va a enviar el
datagrama o del que se recibió.
super ( ) ;
}
private void ejecuta (int puerto) { try {
}
} catch ( IOException e ) { e.printStackTrace ( );
}
}
private class Saludo implements Runnable {
}
@Override
public void run ( ) {
System.out.println ("Cliente conectado"); try {
// Obtenemos un stream de escritura a partir del Socket del cliente PrintWriter pw = new PrintWriter
(cliente.getOutputStream( ), true); pw.println ("Hola desde el servidor");
pw.close( );
} catch (IOException e ) { e.printStackTrace ( );
}
}
}
public static void main (String args [ ]) {
new ServidorSencillo( ).ejecuta(Integer.parse Int (args [0]));
}
}
import java.net.UnknownHostException;
public final class ClienteSencillo { private ClienteSencillo ( ) {
super ( );
}
private void ejecuta (int puerto) { try {
// Me conecto al servidor local que escucha es este puerto Socket cliente = new Socket ("local host",
puerto);
try {
// Recupero un stream de lectura
BufferedReader br = new BufferedReader (new InputStreamReader ( cliente.getInputStream ( ) ) ); String
saludo ;
} finally {
if (cliente != null) cliente.close( ) ;
}
} catch (UnknownHostException e) { e.printStackTrace ( ) ;
}
}
Ejemplo tomado de (Belmonte Fernandez & Óscar) byte [ ] buffer = new byte [8 * 1024];
servidor.send (paquete);
byte [ ] buffer = new byte [ 8 * 1024];
paquete = new DatagramPacket (buffer, buffer.length); servidor.receive (paquete);
6. Bibliografía
Belmonte Fernández, G. C., & Óscar, C. M. (s.f.). Desarrollo de Proyectos Informáticos con Tecnología
Java. Universitat Jaume.
https://www.infor.uva.es/~fdiaz/sd/doc/java.net.pdf. (25 de 05 de 2019). Obtenido de
https://www.infor.uva.es/~fdiaz/sd/doc/java.net.pdf
Martin Santana, M. S., & A. David, L. I. (25 de 05 de 2019). sopa.dis.ulpgc.es/ii-
dso/leclinux/ipc/sockets/sockets.pdf. Obtenido de http://sopa.dis.ulpgc.es/ii-
dso/leclinux/ipc/sockets/sockets.pdf
Murillo Morera, C. P., & Juan de Dios, S. (2010). Implementación de un servidor ftp utilizando el modelo
cliente/servidor mediante el uso de sockets en lenguaje C UNIX con el fin de mejorar los tiempos de
respuesta en la red. Uniciencia, 85.
Pereria, A. (25 de 05 de 2019). https://eslinux.com/articulos/8591/programacion-sockets-lenguaje- c/.
1. Sistemas operativos: Comunicación mediante sockets[ CITATION Sua07 \l 9226 ]
Interface), una interfase para utilizar la red y transportar datos. Igualmente, qué es
un socket, definido como una aplicación para enviar y recibir datos de un proceso
IV. ENTREGA 2
3. DOCUMENTACION PROGRAMA
V. ENTREGA 3
3. DOCUMENTACION PROGRAMA
4. PLAN DE PRUEBAS
VI. CONCLUSIONES
VII. REFERENCIAS
Shetty, N. (2007). https://inst.eecs.berkeley.edu/. Obtenido de EECS instructional and electronics
support: https://inst.eecs.berkeley.edu/~ee122/sp07/Socket%20Programming.pdf