Lectura Fundamental de Sockets
Lectura Fundamental de Sockets
Lectura Fundamental de Sockets
Un ejemplo de una transacción es aquella operación que realiza un cliente de un banco cuando
realiza un retiro, o una consulta a través de un cajero automático.
En resumen, un socket es un punto de comunicación a través del cual un proceso puede enviar
o recibir información. Es lo que comúnmente se conoce como comunicación cliente servidor.
1.3. Tipos de sockets para comunicaciones.
El tipo de un socket define un conjunto de propiedades para la comunicación en la cual esté
involucrado el socket.
Para crear un socket se debe usar la primitiva socket. Ésta primitiva, contiene las características
del socket a saber:
El valor devuelto es un entero (>= cuando el socket es creado correctamente ò < 0 si falló el
proceso de creación)
Ejemplo
#include <sys/types.h>
#include <sys/socket.h>
...
int transa;
...
if ((transa=socket(PF_INET,SOCK_STREAM,0))<0)
{
xxerror(“socket”); /* xxerror, es una librería que crea el programador para reportar errores*/
exit(0);
}
2. Supresión de un socket.
Se define como supresión de un socket, al proceso llevado a cabo para cerrarlo, es decir cuando
ya no hay ninguna operación que posea un descriptor para accederlo. En este punto es donde se
liberan las diferentes tablas de control que utiliza el socket en la comunicación. En otras palabras,
es el último paso que se hace para cerrar una transacción.
La primitiva usada es close().
#include <sys/types.h>
#include <unistd>
...
int transa;
...
if ( close (transa) <0 )
{
xxerror(“socket”);
exit(0);
}
3. Enlace de un socket
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
...
int bind (int bind(int sock, struct sockaddr *p_direccion, int lg); /* socaddr require de sockaddr_in */
bind devuelve
…
De aquí en adelante, el cliente y el servidor están conetados para poder intercambiar mnesajes a
través de las primitivas Read/Write (dentro del socket se conocen como send() y recv()).
El cliente también tiene que crear un socket usando la función socket(), con sus respectivos
parámetros:
- Nombre del descriptor que utilizará para establecer la conexión.
- Estructura con el puerto y la dirección ip, para conectarse
- Longitud de la estructura
...
int transa;
struct sockaddr_in dir;
...
dir.sin_familia=PF_INET;
dir.sin_puerto=htons(13);
if (inet_aton("192.168.101.xx",&dir.sin_addr)==0)
{
xxerror("inet_aton");
exit(0);
}
if (connect(transa, (struct sockaddr *)&dir, sizeof(struct sockaddr_in))<0)
{
if (errno==ECONNREFUSED) /* Servicio no está disponible */
...
else /* segundo error */
{
xxerror("connect");
exit(0);
}
7. Ejemplo de un cliente.
Desarrollo del cliente para solicitar al servidor un texto en mayúsculas
La última rutina vista desde NetBeans
REFERENCIAS
[1] Rifflet, J., 1992. Comunicaciones en UNIX. Madrid: McGraw-Hil. Capítulo 12. Pags 234 - 271
http://eds.b.ebscohost.com.loginbiblio.poligran.edu.co:2048/eds/detail/detail?vid=7&sid=ced1619f-3931-
4b9a-b700-
d9e0152b1c2b%40sessionmgr102&bdata=Jmxhbmc9ZXMmc2l0ZT1lZHMtbGl2ZQ%3d%3d#AN=edseul.
3000144295453&db=edseul
[2] JAMES TCP-IP networking: architecture, administration, and programming. Capítulo 19. Página 209 -
226
http://eds.a.ebscohost.com.loginbiblio.poligran.edu.co:2048/eds/detail/detail?vid=3&sid=fa077792-
35e9-4e28-b5c1-
f34da0599e97%40sessionmgr4006&hid=4113&bdata=Jmxhbmc9ZXMmc2l0ZT1lZHMtbGl2ZQ%3d%
3d#AN=EDSBVB.BV021925626&db=edsbvb
[3] Desarrollo de componentes software para servicios de comunicaciones: UF1288. por Huércano Ruíz,
Federico, Villar Cueli, José. EDITORIAL IC Editorial. FECHA. July 2014. Páginas 148 – 166
http://site.ebrary.com.loginbiblio.poligran.edu.co:2048/lib/bibliopoligransp/reader.action?docID=11
162023&ppg=130