Omitir navegación.
Inicio

Implementación comunicación Cliente Servidor (C)

Imagen de SebaMinguez

Por favor, colaboren. El código funciona, pero seguro puede mejorarse la presentación, explicación, etc.

Basado en la clase de Guido del 01/09/09

Servidor.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
#define PORT    5000    /* /etc/services */
 
typedef struct sockaddr *sad;
 
void error (char *s)
{
        perror(s);
        exit (-1);
}
 
int main ()
{
        int sock, sock1;
        struct sockaddr_in sin, sin1;
        char linea[1024];
        socklen_t l;
        int cto; /* ito o que se yo */
 
        if ((sock = socket (PF_INET, SOCK_STREAM, )) <)
                error("socket");
 
        /* armamos la dirección */
 
        memset(&sin, , sizeof sin);
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PORT); /* adapta segun sea little o big endian) */
        sin.sin_addr.s_addr = INADDR_ANY;
 
        /* */
        if(bind(sock, (sad) &sin, sizeof sin)<)
                error ("bind");
 
        /* */
        if (listen(sock, 5) < ) /* El maximo es 5 */
                error ("listen");
 
        /*esperando*/
        l = sizeof(sin1);
 
        if((sock1 = accept(sock, (sad)&sin1, &l)) < )
                error("accept");
 
        printf(" viene de [%s, %d] \n ",
                        inet_ntoa(sin.sin_addr),
                        ntohs(sin.sin_port));
 
        if ((cto = read(sock1, linea, sizeof(linea)))<)
                        error("read");
 
        linea[cto] = ;
        printf( "llega [%s] \n", linea);
        linea[]++;
 
        if (write(sock1, linea, cto) < )
                error("write");
 
        close(sock1);
        close(sock);
 
        return ;
}

Cliente.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/uio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
 
#define PORT    5000
 
typedef struct sockaddr *sad;
 
void error(char *s)
{
        exit((perror(s), -1));
}
 
int main ()
{
        int sock;
        struct sockaddr_in sin;
        char linea[1024];
        int cto;
 
        /* SOCK_DGRAM es para UDP */
        if ((sock = socket(PF_INET, SOCK_STREAM, ))<)
                error("socket");
 
        sin.sin_family = AF_INET;
        sin.sin_port = htons(PORT);
        inet_aton("127.0.0.1", &sin.sin_addr);
 
        /* llamamos */
        if (connect(sock, (sad) &sin, sizeof(sin))<)
                error("connect");
 
        /*comunicacion */
        if (write (sock, "hola Mundo", 10) < )
                error("write");
 
        if ((cto = read(sock, linea, sizeof(linea))) < )
                error ("read");
 
        linea[cto]=;
        printf("nos devuelven [%s] \n", linea);
        close(sock);
        return ;
}

Trackback URL for "Implementación comunicación Cliente Servidor (C)"

http://www.odiolasllaves.com.ar/trackback/117

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de backdoorman

Creo que no Funciona

Creo que este código no funciona ya que los if's están de esta forma: if(y < ) le falta el lado derecho de la comparación entre otros muchos errores que se pueden observar a simple vista. 

Imagen de SebaMinguez

Crees o no crees? jeje Es un

Crees o no crees? jeje

Es un error en la visualización del codigo. A la derecha del simbolo hay ceros (0) pero por un error en la presentación no se muestran. Creo que ademas es medio obvio. Perdón, pero el comentario suena medio pedante. Disculpas si no es asi.

¿Que otros errores ves?

Repito, el código funciona. Ahora que retomo el desarrollo del sitio voy a ir solucionando estos pequeños errores.

Gracias por comentar.

Les recuerdo que si se registran los comentarios se publican sin necesidad de que los apruebe y pueden editar el código ustedes mismo.

Saludos.