Problema entre cliente y servidor en C

Temas relacionados con la programación de aplicaciones que funcionan sobre un servidor.
Responder
Mensaje
Autor
xexoandres
Mensajes: 1
Registrado: 30/06/2011 1:09 pm
Ubicación: concepcion

Problema entre cliente y servidor en C

#1 Mensaje por xexoandres » 30/06/2011 1:23 pm

Hola amigos saben que un profe nos mando dos archivos que contenian muy poca informacion de echo venian casi vacios y nos pedia que conectaramos el cliente con el servidor, tuve averiguando y use socket para hacer esta coneccion entre estos dos programas, pero no me funciona la coneccion, me tira varios errores, no se que mas pueda hacer necesito que alguien me oriente para poder compilar estos programas sin problemas, aqui les dejo los archivos, trabajo con DEV-C++



Aqui el codigo del cliente.c

Código: Seleccionar todo

/************Client.c ***********/
#include <stdio.h>
#include <netdb.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#define PUERTO_SERVIDOR 7000 
#define ADDR struct sockaddr_in

void format_ip_addr( unsigned int host, char *n );

int main( char argc, char **argv)
{ 
    ADDR addr;   
    int s;   
    struct hostent *hp_ptr;
if( ( s = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
{ perror( "Socket" );
exit( 1 );
} 
if( ( hp_ptr = gethostbyname( argv[1] ) ) == NULL )
{ perror( "Gethostbyname" );
exit( 1 );
}
bcopy( hp_ptr->h_addr, &( addr.sin_addr.s_addr ), hp_ptr->h_length );
addr.sin_port = htons( atoi( argv[2] ) );
addr.sin_family = AF_INET; 
if( connect( s, &addr, sizeof( ADDR ) ) != 0 )
{ perror( "Connect" );
exit( 1 );
}
write( s, argv[3], strlen( argv[3] ) );
close( s );
return( 0 );
}
void format_ip_addr( unsigned int host, char *n )
{ unsigned char *d;
d = ( unsigned char * ) ( &host );
sprintf( n, "%d.%d.%d.%d", d[0], d[1], d[2], d[3] );
}
Aqui el codigo del servidor.c

Código: Seleccionar todo

/* Server.c */
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#define PUERTO_SERVIDOR 7000 
#define ADDR struct sockaddr_in
#define MAX_MSG_LEN 256
void format_ip_addr( unsigned int host, char *n );
int main( void )
{ 
    ADDR addr;    
    int s, sc, fin;
 if( ( s = socket( AF_INET, SOCK_STREAM, 0 ) ) == -1 )
 { perror( "Socket" );
 exit( 1 );
 } 
 addr.sin_family = AF_INET; 
 addr.sin_port = htons( PUERTO_SERVIDOR );
 addr.sin_addr.s_addr = INADDR_ANY; 
 if( bind( s, &addr, sizeof( ADDR ) ) == -1 )
 { perror( "Bind" );
 exit( 2 );
 }
 if( listen( s, 5 ) == -1 )
 { perror( "Listen" );
 exit( 3 );
 }
 while( 1 == 1 )
 { char buff[ MAX_MSG_LEN ];
 ADDR addr_cli;
 int addr_cli_len;
 addr_cli_len = sizeof( ADDR );
 sc = accept( s, &addr_cli, &addr_cli_len );
 if( fork() == 0 )
 {  char ip_addr[20];
 format_ip_addr( addr_cli.sin_addr.s_addr, ip_addr );
 /* printf( "Family: %d\n", addr_cli.sin_family );
 printf( "Port : %d\n", ntohs( addr_cli.sin_port ) );
 printf( "I.P. : %s\n", ip_addr );*/
 close( s );
 fin=read( sc, buff, MAX_MSG_LEN );
 buff[fin]=0;
 printf( "%s %s\n", ip_addr, buff );
 close( sc );
 break;
 } 
 close( sc );
 }
 return( 0 );
}
void format_ip_addr( unsigned int host, char *n )
{unsigned char *d;
d = ( unsigned char * ) ( &host );
sprintf( n, "%d.%d.%d.%d", d[0], d[1], d[2], d[3] );
}


Saludos cordiales, espero respuestas, de antemano muchas gracias.

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado