• Lunes 29 de Abril de 2024, 04:05

Autor Tema:  Ayuda Con Un Programa Cliente-servidor!!  (Leído 2194 veces)

fabet

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Ayuda Con Un Programa Cliente-servidor!!
« en: Martes 23 de Diciembre de 2003, 10:12 »
0
HOLA A TODOS.

LE PIDO DE SU AYUDA PORQUE SINCERAMENTE NO TENGO MUCHA EXPERIENCIA CON LINUX, Y NECESITO DESARROLLAR UNA APLICACIÓN TIPO CLIENTE-SERVIDOR A EJECUTARSE EN DOS MÁQUINAS LINUX, DICHA APLICACIÓN DEBE DE PERMITIR AL PROGRAMA CLIENTE CONECTARSE AL PROGRAMA SERVIDOR Y PEDIRLE EL TIPO DE S.O. Y VERSIÓN QUE ESTA CORRIENDO, ASI COMO LOS PROCESOSO QUE SE ESTAN EJECUTANDO.

HE BUSCADO INFORMACIÓN Y LO QUE HE ENCONTRADO HASTA EL MOMENTO ES MEDIANTE LA PROGRAMACIÓN CON SOCKETS, SIN EMBARGO NO SE COMO IMPLEMENTARLO PARA LOGRAR QUE MANDE LA INFORMACIÓN NECESARIA AL CLIENTE, (COMO SI ESTUVIERA EJECUTANDO EL CLIENTE EL COMANDO PS EN LA MÁQUINA DEL SERVIDOR Y A LA VEZ VISUALIZANDOLO.)

LES AGRADECERÍA DE ANTEMANO SU AYUDA O ALGUNA SUGERENCIA QUE ME PUDIERA SERVIR PARA LA RESOLUCIÓN A ESTE PROBLEMA.

DE VERDAD, GRACIAS POR SU ATENCIÓN Y RECIBAN UN AFECTUOSO SALUDO.

Martin Candurra

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Ayuda Con Un Programa Cliente-servidor!!
« Respuesta #1 en: Martes 23 de Diciembre de 2003, 19:05 »
0
Leyendo la Guia Beej no vas a tener problemas en implementar una aplicacion cliente servidor.
Respecto a los procesos, podes levantarlos con el comando ps con el modificador que gustes, y redireccionar la salida standar del servidor hacia el socket.
Es bastante simple, es cuestion de que te sientes a hacerlo.

Saludos.

sicorix

  • Nuevo Miembro
  • *
  • Mensajes: 15
    • Ver Perfil
Re: Ayuda Con Un Programa Cliente-servidor!!
« Respuesta #2 en: Miércoles 24 de Diciembre de 2003, 02:35 »
0
¡La famosa Guia Beej!
Creo que es uno de los mejores manuales que corren por Internet, sin duda.

xanatos

  • Miembro activo
  • **
  • Mensajes: 93
    • Ver Perfil
    • http://cucea.glo.org.mx
Re: Ayuda Con Un Programa Cliente-servidor!!
« Respuesta #3 en: Jueves 1 de Enero de 2004, 19:28 »
0
orale  esa no la conocia dejen leer :D

fabet

  • Nuevo Miembro
  • *
  • Mensajes: 9
    • Ver Perfil
Re: Ayuda Con Un Programa Cliente-servidor!!
« Respuesta #4 en: Sábado 3 de Enero de 2004, 01:11 »
0
Hola:

Gracias por su ayuda, he leído la Guía Beej y ya logré hacer el programa cliente y el servidor, sin embargo no he podido redireccionar la salida standar del servidor hacia el socket, como lo planteaba Martin.

Les agradecería nuevamente su ayuda, les mando el código de los dos programas, para ver si pueden ayudarme viendo como puedo lograr el redireccionamiento, por  favor.

Este es el código del servidor:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>

int puerto=8000;

void main()
{
   struct sockaddr_in sin;
   struct sockaddr_in pin;
   int my_socket;
   int temp_my_socket;
   int tam_direccion;
   char buf[16384];
   int i,len;

   my_socket=socket(AF_INET,SOCK_STREAM,0);
   if (my_socket==-1)
   {
      perror("Lamada a socket");
      exit(1);
   }
   
   bzero(&sin,sizeof(sin));
   sin.sin_family=AF_INET;
   sin.sin_addr.s_addr=INADDR_ANY;
   sin.sin_port=htons(puerto); // ordenacion de la red

   if (bind(my_socket,(struct sockaddr *)&sin,sizeof(sin))==-1)
   {
      perror("Llamada para unir\n");
      exit(1);
   }
   
   if (listen(my_socket,20)==-1)
   {
      perror("Llamada para escuhar\n\n");
      exit(1);
   }
   
   printf("Aceptando conexiones ...\n\n");
   
   while(1)
   {
      temp_my_socket=accept(my_socket,(struct sockaddr *)&pin,&tam_direccion);
      if(temp_my_socket==-1)
      {
         perror("Llamada para aceptar");
         exit(1);
      }
      
      if(recv(temp_my_socket,buf,16384,0)==-1)
      {
         perror("Llamada para recibir\n");
         exit(1);
      }


      printf("Recibido del cliente numero de peticion:%s\n\n",buf);
         if (buf[0]=='1')
         {

            if (send(temp_my_socket,system("uname -a"),sizeof(system("uname -a")),0)==-1)
            {
               perror("Llamada para enviar");
               exit(1);
            }
            //close(my_socket);
         }

         else if (buf[0]=='2')
         {
            if(send(temp_my_socket,system("ps aux"),sizeof(system("ps aux")),0)==-1)
            {
               perror("Llamada para enviar \n\n");
               exit(1);
            }
            //close(my_socket);
         }

         else
         {
         close(my_socket);
         }



   }
}



Otra vez, les agradezco de antemano su atención.

Feliz año 2004.
El mensaje contiene 1 archivo adjunto. Debes ingresar o registrarte para poder verlo y descargarlo.

Martin Candurra

  • Miembro activo
  • **
  • Mensajes: 36
    • Ver Perfil
Re: Ayuda Con Un Programa Cliente-servidor!!
« Respuesta #5 en: Lunes 5 de Enero de 2004, 14:09 »
0
Citar
if (send(temp_my_socket,system("uname -a"),sizeof(system("uname -a")),0)==-1)

No es exactamente a esto a lo que me refería  ;)
Lo que tenés que hacer es cerrar el descriptor SDTOUT_FILENO (con una llamada a close) y después mediante la llamada al sistema dup, duplicar el descriptor del socket.