Escolar Documentos
Profissional Documentos
Cultura Documentos
Mayo 2018
/* Sockets */
Los sockets proveen com unicación punto a punto de dos vías entre dos
procesos. Los sockets son m uy versátiles y son la base de com unicación
interprocesos. Un socket es un punto extrem o de com unicación al cual un
nom bre puede ligarse. Éste tiene un tipo y uno o m as procesos asociados.
Los sockets existen en dom inios de com unicación.
‘Stream socket’
P rovee flujo de datos de dos vías, secuencial, confiable, y no duplicado sin
lim itantes de registro.
‘Datagram socket’
P rovee m ensajes en flujo de dos vías. En un socket datagram a puede
recibir m ensajes en orden diferente de la secuencia de la cual fueron
enviados. Los lim ites de registro en los datos son preservados. Los
datagram a operan en form a sem ejante a cartas que van y vienen en el
correo. El tipo de socket es: SOCK_DGR A M , el cual, en el dom inio I nternet
usa el protocolo Datagram a (UDP ).
Programa servidor:
Programa cliente:
// http://www.cs.cf.ac.uk/Dave/C/node28.html (3 of 7) [25/03/2002 10:40:11]
// socket_cl.c
// programa socket cliente
//
// Created by Alberto Paz G on 29/05/17.
//
//
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <stdio.h>
#define NSTRS 3 /* No. de cadenas */
#define ADDRESS "127.0.0.1" /* direccion a conectarse */
/*
* Cadenas que se enviaran al servidor
*/
char *strs[NSTRS] = {
"Primera cadena desde el cliente.\n",
"Segunda cadena desde el cliente.\n",
"Tercera cadena desde el cliente.\n"
};
main()
{
char c;
FILE *fp;
register int i, s, len;
struct sockaddr_un saun;
/*
* Obtenga un socket con el cual trabajar. Este estará en el
* dominio UNIX y sera un 'stream socket'
*/
if ((s = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
perror("cliente: socket");
exit(1);
}
/*
* Crear la dirección a la que se conectará.
*/
saun.sun_family = AF_UNIX;
strcpy(saun.sun_path, ADDRESS);
/*
Práctica 18
Mayo 2018
* Trate de connectarse a la direccion. Para lograrlo, el servidor
* debe ya haberse ligado a esta direccion y suministrado una
* requerimiento listen()
*
* El tercer argumento indica la 'longitud' de la estructura, no
* solo la longitud del nombre del socket.
*/
len = sizeof(saun.sun_family) + strlen(saun.sun_path);
if (connect(s, &saun, len) < 0) {
perror("cliente: conecta");
exit(1);
}
/*
* Usaremos 'stdio' para leer del socket
*/
fp = fdopen(s, "r");
/*
* Primero leemos algunas cadenas del servidor y las imprimimos
*/