intente con esa solucion pero aun nada ... pero voy a solucionarlo denlo por echo y luego subo la solucion
Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.
Mostrar Mensajes Menú#include <stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<unistd.h>
#include<netinet/in.h>
#include<stdlib.h>
#include<netdb.h>
#include<string.h>
#include<arpa/inet.h>
#include<signal.h>
#define PUERTO 7777
int main()
{
struct sockaddr_in servidor;
struct sockaddr_in cliente;
int sock_servidor,sock_cliente;
if((sock_servidor=socket(AF_INET,SOCK_STREAM,0))<0)
{
perror("socket");
return -1;
}
servidor.sin_family=AF_INET;
servidor.sin_port=htons(PUERTO);
servidor.sin_addr.s_addr=INADDR_ANY;
if((bind(sock_servidor,(struct sockaddr *)&servidor,sizeof servidor))<0)
{
perror("bind");
return -1;
}
if(listen(sock_servidor,20)<0)
{
perror("listen");
return -1;
}
int tam_cliente;
char* ip_cliente;
int puerto_cliente;
char mensaje_cliente[20];
signal(SIGCHLD,SIG_IGN);
while(1)
{
tam_cliente=sizeof cliente;
sock_cliente=accept(sock_servidor,(struct sockaddr *)&cliente,&tam_cliente);
if(sock_cliente<0)
{
perror("acceptando cliente");
return -1;
}
ip_cliente=inet_ntoa(cliente.sin_addr);
puerto_cliente=ntohs(cliente.sin_port);
printf("cliente conectado:%s:%d\n",ip_cliente,puerto_cliente);
memset(mensaje_cliente,0,sizeof mensaje_cliente);
//read(sock_cliente,&mensaje_cliente,sizeof mensaje_cliente);
//printf("mensaje cliente:%s\n",mensaje_cliente);
if(!fork())
{
printf("inicio fork\n");
close(sock_servidor);
dup2(sock_cliente,0);
dup2(sock_cliente,1);
close(sock_cliente);
printf("introduzca comando:\n");
fgets(mensaje_cliente,20,stdin);
printf("mensaje_cliente=\n%s",mensaje_cliente);
char *com[]={"ls","-l",NULL};
execvp(com[0],com);
exit(1);
}
close(sock_cliente);
}
return 0;
}
#include<stdio.h>
#include<sys/types.h>
#include<sys/socket.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#include<netdb.h>
#include<unistd.h>
#include<stdlib.h>
#include<string.h>
#define PUERTO 7777
int main()
{
struct sockaddr_in cli;
struct sockaddr_in serv;
int s_cliente,s_servidor;
s_cliente=socket(PF_INET,SOCK_STREAM,0);
if (s_cliente<0)
{
perror("socket");
return -1;
}
cli.sin_family=AF_INET;
cli.sin_port=htons(0);
cli.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(s_cliente,(struct sockaddr *)&cli,sizeof cli)<0)
{
perror("bind");
return -1;
}
serv.sin_family=AF_INET;
serv.sin_port=htons(PUERTO);
serv.sin_addr.s_addr=inet_addr("127.0.0.1");
if(connect(s_cliente,(struct sockaddr *)&serv,sizeof serv)<0)
{
perror("connectando");
return -1;
}
char cadena[30];
//printf("introduzca el comando:\n");
//scanf("%[^\n]",cadena);
//fflush(stdin);
//send(s_cliente,cadena,sizeof cadena,0);
recv(s_cliente,cadena,sizeof cadena,0);
close(s_cliente);
return 0;
}
while(1)
{
tam_cliente=sizeof cliente;
sock_cliente=accept(sock_servidor,(struct sockaddr *)&cliente,&tam_cliente);
if(sock_cliente<0)
{
perror("acceptando cliente");
return -1;
}
ip_cliente=inet_ntoa(cliente.sin_addr);
puerto_cliente=ntohs(cliente.sin_port);
printf("cliente conectado:%s:%d\n",ip_cliente,puerto_cliente);
memset(mensaje_cliente,0,sizeof mensaje_cliente);
//read(sock_cliente,&mensaje_cliente,sizeof mensaje_cliente);
//printf("mensaje cliente:%s\n",mensaje_cliente);
if(!fork())
{
printf("inicio fork\n");
close(sock_servidor);
dup2(sock_cliente,0);
dup2(sock_cliente,1);
close(sock_cliente);
printf("introduzca comando:\n");
fgets(mensaje_cliente,20,stdin);
printf("mensaje_cliente=\n%s",mensaje_cliente);
char *com[]={"ls","-l",NULL};
execvp(com[0],com);
exit(1);
}
close(sock_cliente);
}
me funciona con telnet pero no con mi programa cliente que tengo creado en c que tiene las funciones basicas de conectar con servidor
int main()
{
struct sockaddr_in cli;
struct sockaddr_in serv;
int s_cliente,s_servidor;
s_cliente=socket(PF_INET,SOCK_STREAM,0);
if (s_cliente<0)
{
perror("socket");
return -1;
}
cli.sin_family=AF_INET;
cli.sin_port=htons(0);
cli.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(s_cliente,(struct sockaddr *)&cli,sizeof cli)<0)
{
perror("bind");
return -1;
}
serv.sin_family=AF_INET;
serv.sin_port=htons(PUERTO);
serv.sin_addr.s_addr=inet_addr("127.0.0.1");
if(connect(s_cliente,(struct sockaddr *)&serv,sizeof serv)<0)
{
perror("connectando");
return -1;
}
char cadena[30];
//printf("introduzca el comando:\n");
//scanf("%[^\n]",cadena);
//fflush(stdin);
//send(s_cliente,cadena,sizeof cadena,0);
recv(s_cliente,cadena,sizeof cadena,0);
close(s_cliente);
return 0;
}
if(!fork())
{
dup2(sockClie,0);//stdin
dup2(sockclie,1);//stdout
close(sockClie);
fgets(arg,sizeof arg,stdin);
execvp(arg,arg);
}