Está en la página 1de 6

Codigo Fuente Cliente/Servidor en C

Apuesta en la liga local, la Libertadores o el evento que quieras.


www.bwin.com

Aqui les dejo dos Ejemplos de Cliente/Servidor en lenguaje C.


Son de unas clases de la facu en la materia de sistemas distribuidos de ingenieria en informatica

- - - - - - - - - - - - - - - - - - - - - Ejemplo 1 - - - - - - - - - - - - - - - - - - -Cliente 1 #include<stdio.h> #include<sys/types.h> #include<sys/socket.h> #include<netinet/in.h> #include<netdb.h> #DEFINE PORT 3600 #DEFINE MAXDATASIZE 100 int main(int argc, char *argv[]) { int fd, numbytes; char buf[MAXDATASIZE]; struct hostent *he; struck sockaddr_in server; if (argc!=2) { printf("Usa:%<Direccion IP>n", argv[0]; esit(-1); } if (he=gethostbyname(argv[1]))==NULL) { printf("error en gethosbynamen" ); exit(-1); } if ((fd=socket(AF_INET, sock_stream,0)==-|) { printf("error en socketn" ); exit(-1); }

server.sin_family=AF_INET; server.sin_port=htons(PORT); server.sin_addr=*((struct in_addr*) he->h_addr); bzero(&(server.sin_zero),0); if (connect(fd,(struct sockaddr*)&server, sizeof(struct sockaddr))==-1) { printf("error en connectn" ); exit(-1); } if (numbytes=recv(fd,buf,MAXDATASIZE,0))==-1) { printf("error en recvn" ); exit(-1); } buf[numbytes]='0'; printf("Mensaje del servidor:%n",buf); close(fd); }

Servidor 1 #include<stdio.h> #include<sys/tpes.h> #incuude<sys/socket.h> #include<netinet/in.h> #DEFINE PORT 3500 #DEFINE BACKLOG 2 main() { int fd, fd2; struct sockaddr_in server; struct sockaddr_in client; int sn_size; if ((fd=socket(AF_INET, SOCK_STREAM, 0))==1) { printf ("Error en socketn" ); exit(-1); }

server.sin_family = AF_INET; server.sin_port=htons(PORT); server.sinaddrs.s_addr=INADDR_ANY; bzero(&(server.sin_zero),8); if (bind(fd,(strut sockaddr *) &server, sizeof(struct sockaddr))== -1) { printf("Error en bindn" ); exit(-1) } if (listen(fd, BAKLOG) == -1) { printf("Error en listenn" ); exit(-1); } while (1) { sin_size = sizeof(struct sockaddr_in); if ((fd2=accept(fd,(struct sockaddr *)&client, &sin_size)) == -1) { printf ("error en accept n" ); exit(-1); } printf("Se conectaron desde %sn", inet_ntoa(client.sin_addr)); send(fd2, "Bienvenido a mi servidor!!!n",26, 0); close(fd2); } }

- - - - - - - - - - - - - - - - - - - - - Ejemplo 2 - - - - - - - - - - - - - - - - - - -Cliente 2 #include #include #include #include <stdio.h> <string.h> <sys/types.h> <sys/socket.h>

#include <netinet/in.h> #include <arpa/inet.h> /**********************************************************/ /* funcin MAIN */ /* Orden Parametros: IP destino, puerto , mensaje */ /* */ /**********************************************************/ main(int argc, char *argv[]) { int s; struct sockaddr_in bs,des; char resp[255]; int *sd; if (argc == 4) { // Creamos el socket s = socket(AF_INET,SOCK_STREAM,0); if (s != -1) { bs.sin_family = AF_INET; bs.sin_port = htons(0); //Asigna un puerto disponible dela mquina bs.sin_addr.s_addr = htonl(INADDR_ANY); //Asigna una IP de la mquina //Asigna un nombre local al socket if ( bind(s,(struct sockaddr*)&bs, sizeof(bs)) != -1) { //Se prepara el nombre de la mquina remota des.sin_family = AF_INET; des.sin_addr.s_addr = inet_addr(argv[1]); des.sin_port = htons(atoi(argv[2])); //Establece la conexin con la mquina remota connect(s,(struct sockaddr*)&des,sizeof(des)); //Enva el mensaje send(s,argv[3],strlen(argv[3])+1,0); printf("nn->Enviando: %s, a: %s en el puerto: %s n",argv[3], argv[1], argv[2]); //Recibe la respuesta recv(s,resp, sizeof(resp) ,0); printf("<-Recibido: %sn",resp); //Se cierra la conexin (socket) close(s); } else

{ printf("ERROR al nombrar el socketn" ); } } else { printf("ERROR: El socket no se ha creado correctamente!n" ); } } else { printf("nnaEl nmero de parmetros es incorrectonn" ); } }

Servidor 2

#include <stdio.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> /**********************************************************/ /* funcin MAIN */ /* Orden Parametros: Puerto */ /* */ /**********************************************************/ main(int argc, char *argv[]) { int s; struct sockaddr_in bs, in; char entrada[255]; int sd; if (argc == 2) { // Creamos el socket s = socket(AF_INET,SOCK_DGRAM,0); if (s != -1) { bs.sin_family = AF_INET; bs.sin_port = htons(atoi(argv[1])); //Asigna el puerto especificado por la lnea de comandos bs.sin_addr.s_addr = htonl(INADDR_ANY); //IP cualquiera de la mquina

//Asigna un nombre local al socket if( bind(s,(struct sockaddr*)&bs, sizeof(bs)) != -1) { printf("naServidor ACTIVO escuchando en el puerto: %sn",argv[1]); //El while permite atender a mltiples clientes while (1) { //Recibe la cadena del cliente if ( recvfrom(s,entrada, sizeof(entrada) ,0,(struct sockaddr*) &in, &sd)== -1) perror("Error en recvfrom" ); //Devuelve la cadena al cliente if (sendto(s,strcat(entrada, "" ; ) ,strlen(entrada)+1,0,(struct sockaddr*) &in, sizeof(in)) == -1) perror("Error en sendto" ); } //Se cierra el socket close(s); } else { printf("ERROR al nombrar el socketn" ); } } else { printf("ERROR: El socket no se ha creado correctamente!n" ); } } else { printf("nnaEl nmero de parmetros es incorrectonn" ); } }

Los codigos son basicos, pero espero que le sea de utilidad a alguien y si quieren compartir con mejoras en el codigo GENIAL para los que alguna vez

También podría gustarte