Autor
|
Tema: mostrar en cliente el resultado de execvp de servidor (Leído 4,802 veces)
|
tojo2ska8
Desconectado
Mensajes: 8
|
tengo este codigo estandard de ejemplo no es el coidgo en si: este codigo esta en el servidor y funciona bien con telnet if(!fork()) { dup2(sockClie,0);//stdin dup2(sockclie,1);//stdout close(sockClie); fgets(arg,sizeof arg,stdin); execvp(arg,arg); }
el problema q tengo es que no me funciona en mi programa cliente q hago una conecion normal con el connect(sd,....); por ejemplo cuando ejecuto telnet ip puerto me hace peticion del comando y luego muestra el resultado en la pantalla de telnet .. quiero q mi clilene haga lo mismo pero nada porfa agradezco de antemano su ayuda gracias
|
|
« Última modificación: 20 Marzo 2018, 19:25 pm por engel lex »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Si muestras tu código podríamos ver donde falla. A lo mejor no es allí y es en otro sitio.
|
|
|
En línea
|
|
|
|
tojo2ska8
Desconectado
Mensajes: 8
|
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; }
este es el programa cliente
· Los códigos deben ir en etiquetas GeSHi · No se debe publicar 2 veces seguidas, usar el boton modificar >aquí las reglas del foro -Engel Lex
|
|
« Última modificación: 20 Marzo 2018, 19:25 pm por engel lex »
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Supongo que no lo sabes, pero deberías encerrar el código entre etiquetas GeSHi. Edita tus mensajes, ve al desplegable 'Código GeSHi' que tienes en las herramientas de edición, arriba de la respuesta, elige el lenguaje que vas a usar en tus ejemplos y aparecerán unas etiquetas tal que así [etiqueta][/etiqueta]. Mete en medio de ellas tu código. Tal que así: [etiqueta]TU_CODIGO[/etiqueta].
Por otra parte, pon el código completo, porqué tener que andar haciendo parches para hacerlo ejecutable como que da pereza. Y paso. Y creo que el resto de la gente piensa igual.
|
|
« Última modificación: 20 Marzo 2018, 19:20 pm por MAFUS »
|
En línea
|
|
|
|
tojo2ska8
Desconectado
Mensajes: 8
|
ok soy nuevo en esto gracias por responder
|
|
|
En línea
|
|
|
|
tojo2ska8
Desconectado
Mensajes: 8
|
servidor: #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) { 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) { return -1; } if(listen(sock_servidor,20)<0) { 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) { 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()) { 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); } close(sock_cliente); } return 0; }
cliente: #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) { 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) { 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) { 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; }
|
|
|
En línea
|
|
|
|
|
tojo2ska8
Desconectado
Mensajes: 8
|
Jajjajajjajaj pero igual lo puedes migrar a windows es fácil , en windows trabajo con qt creator
|
|
|
En línea
|
|
|
|
MAFUS
Desconectado
Mensajes: 1.603
|
Intenta convertir los datos recibidos en una cadena y mostrarla en pantalla. Es lo que falta en cliente.
No lo he probado, es intuición.
|
|
« Última modificación: 20 Marzo 2018, 22:46 pm por MAFUS »
|
En línea
|
|
|
|
tojo2ska8
Desconectado
Mensajes: 8
|
probé con explorador de internet firefox http://direccionip:7777 y me funciona bien sin necesidad de convertir a srting execvp de igual manera me funciona con netcat nc direccionip 7777 y funciona bien me muestra el resultado en la pantalla de nc , con telnet igual funciona .. pero mi programa cliente no se como controlar o q lineas de codigo me faltan me siento bloqueado
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
mostrar resultado de tabla en textbox
Programación Visual Basic
|
oscardiaz
|
4
|
8,379
|
18 Septiembre 2009, 04:28 am
por oscardiaz
|
|
|
ayuda con php mostrar foto segun resultado
« 1 2 »
PHP
|
rainner
|
10
|
6,046
|
30 Julio 2010, 05:50 am
por Zazú
|
|
|
Mostrar resultado de www.images.google.com en PictureBox
.NET (C#, VB.NET, ASP)
|
enterariel
|
9
|
5,352
|
5 Agosto 2012, 02:36 am
por Keyen Night
|
|
|
No puedo mostrar los resultado correctos en mi calculadora
« 1 2 »
.NET (C#, VB.NET, ASP)
|
DanielPy
|
12
|
7,876
|
6 Mayo 2013, 21:20 pm
por engel lex
|
|
|
Mostrar resultado de un web service JSON
PHP
|
lucheano
|
9
|
5,911
|
28 Septiembre 2015, 23:56 pm
por 0roch1
|
|