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.