You are on page 1of 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); }

close(fd). if (connect(fd.server. exit(-1). printf("Mensaje del servidor:%n".h> #DEFINE PORT 3500 #DEFINE BACKLOG 2 main() { int fd. struct sockaddr_in client. 0))==1) { printf ("Error en socketn" ).(struct sockaddr*)&server. } buf[numbytes]='0'.MAXDATASIZE. if ((fd=socket(AF_INET.buf). server. } if (numbytes=recv(fd.h> #include<sys/tpes.h> #include<netinet/in. sizeof(struct sockaddr))==-1) { printf("error en connectn" ). struct sockaddr_in server.sin_zero). } . bzero(&(server.sin_addr=*((struct in_addr*) he->h_addr).sin_port=htons(PORT).buf. SOCK_STREAM.0). server. exit(-1).sin_family=AF_INET. } Servidor 1 #include<stdio.0))==-1) { printf("error en recvn" ). int sn_size. exit(-1). fd2.h> #incuude<sys/socket.

sin_zero).. &sin_size)) == -1) { printf ("error en accept n" )..h> <sys/socket... inet_ntoa(client.. if (bind(fd.... close(fd2).. exit(-1) } if (listen(fd.h> .26.. "Bienvenido a mi servidor!!!n". BAKLOG) == -1) { printf("Error en listenn" )...-Cliente 2 #include #include #include #include <stdio...sin_port=htons(PORT).h> <string..Ejemplo 2 .. } printf("Se conectaron desde %sn". exit(-1). send(fd2.s_addr=INADDR_ANY. } } ....server.8)..h> <sys/types..sinaddrs...(struct sockaddr *)&client. sizeof(struct sockaddr))== -1) { printf("Error en bindn" ). if ((fd2=accept(fd. exit(-1)... 0)...sin_addr))..... server..sin_family = AF_INET.. server.. } while (1) { sin_size = sizeof(struct sockaddr_in).(strut sockaddr *) &server.... bzero(&(server.

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

if (s != -1) { bs. //Asigna el puerto especificado por la línea de comandos bs. in. int sd.h> #include <arpa/inet.SOCK_DGRAM. struct sockaddr_in bs.{ printf("ERROR al nombrar el socketn" ). bs.h> #include <sys/types.h> #include <string.s_addr = htonl(INADDR_ANY).h> /**********************************************************/ /* función MAIN */ /* Orden Parametros: Puerto */ /* */ /**********************************************************/ main(int argc.h> #include <sys/socket. char entrada[255]. } } else { printf("ERROR: El socket no se ha creado correctamente!n" ).sin_addr.sin_port = htons(atoi(argv[1])). if (argc == 2) { // Creamos el socket s = socket(AF_INET.sin_family = AF_INET.0). //IP cualquiera de la máquina . char *argv[]) { int s.h> #include <netinet/in. } } Servidor 2 #include <stdio. } } else { printf("nnaEl número de parámetros es incorrectonn" ).

"" . sizeof(entrada) . pero espero que le sea de utilidad a alguien y si quieren compartir con mejoras en el codigo GENIAL para los que alguna vez . //Devuelve la cadena al cliente if (sendto(s. sizeof(in)) == -1) perror("Error en sendto" ). ) . //El while permite atender a múltiples clientes while (1) { //Recibe la cadena del cliente if ( recvfrom(s.entrada. &sd)== -1) perror("Error en recvfrom" ).0. } else { printf("ERROR al nombrar el socketn" ). } } else { printf("ERROR: El socket no se ha creado correctamente!n" ). } //Se cierra el socket close(s).strlen(entrada)+1.strcat(entrada. } } else { printf("nnaEl número de parámetros es incorrectonn" ).//Asigna un nombre local al socket if( bind(s. sizeof(bs)) != -1) { printf("naServidor ACTIVO escuchando en el puerto: %sn".argv[1]). } } Los codigos son basicos.(struct sockaddr*)&bs.(struct sockaddr*) &in.0.(struct sockaddr*) &in.