Menú

Mostrar Mensajes

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ú

Mensajes - kondrag_X1

#131
Buenas pues estaba intentando aclararme con la funcion select y ya de paso terminar una practica para la uni asi qe me puse ha hacer un suministrador de numeros aleatorios qe cuando presiones el teclado sin introducir ningun caracter acabe el programa y qe me puedan desconectar remotamente.

bueno pues el problema que tengo es el siguiente la funcion select siempre me devuelve uno cuando lo qe me interesa esqe sea 0 para que salte el timeout de la funcion select.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <getopt.h>

#define Puerto 4000
#define N 256
#define STDIN 0

//declaro prototipos
int generador ();

int main(int argc,char *argv[]){

int sockfd,connfd,opc=0,maxfd,ret_select,aleatorio;
struct sockaddr_in servidor;
socklen_t size_server;
char buffer[N];
char ip[20];
char suministrador[15]="suministrador\0";
char valor[2]="s:";
struct timeval tv;
fd_set allset,rset;

//comprobamos los argunmentos qe nos pasan en argc
if(argc!=3){
printf("¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡ Error !!!!!!!!!!!!!\n");
printf("Los argumentos pasados no son los correctos.\n");
printf("Uso: nombre_programa -opciones [ argumentos ...]\n");
printf("Salimos del programa.......\n");
exit(1);}

//comprobaremos las opciones que nos han pasado por los comandos
while(opc!=-1){

opc=getopt(argc,argv,valor);

switch(opc){

case 's':
bzero(ip,sizeof(ip));
strcpy(ip,optarg);
break;
}
}

sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0){printf("Error en el socket\n");exit(1);}

//inicializamos la structura del servidor(manejador de eventos)
bzero(&servidor,sizeof(servidor));
servidor.sin_family=AF_INET;
servidor.sin_port=htons(Puerto);
servidor.sin_addr.s_addr=inet_addr(ip);


size_server=sizeof(servidor);

connfd=connect(sockfd,(struct sockaddr*)&servidor,size_server);
if(connfd<0){printf("Error en el connect\n");exit(1);}


printf("\n>>>>>>>>SUMINISTRADOR<<<\n");
printf("\n#Conectado con el servidor:%s por el puerto %d\n\n",ip,Puerto);

//enviamos el mensaje suministrador para registranos en el manejador de eventos
write(sockfd,suministrador,sizeof(suministrador));
printf(">>>>>>DIGO :%s\n",suministrador);

//inicializamos los conjuntos de descriptores
FD_ZERO(&rset);
FD_ZERO(&allset);

//añadimos el conjunto de descriptores a observar teclado y el canal de comunicaciones
FD_SET (STDIN,&allset);
FD_SET (sockfd,&allset);

//colocamos el descriptor como el maximo
maxfd=sockfd;

//generamos el primer tiempo de espera con un numero aleatorio y lo guardamos en la structura
aleatorio=tv.tv_sec=generador();
tv.tv_usec=0;

while(1){

//igualamos el conjunto general con el auxiliar
rset=allset;

printf("vamos a esperar %d para enviar el mensaje\n",aleatorio);

ret_select=select(maxfd+1,&rset,NULL,NULL,&tv);
// printf("\n\tret_select=%d\n",ret_select);

//comprovaremos que descriptores an saltado o si ha sido el tiempo
//salta el socket
if(FD_ISSET(sockfd,&rset)==1){
// printf("\n\tsoy yo el qe salta\n\t");
//si recibimos un caracter en blanco qe cierro la conexcion
bzero(buffer,sizeof(buffer));
read(sockfd,buffer,sizeof(buffer));

if(strlen(buffer)==1){
printf("\n>>>>> nos desconectan...\n\t Adios\n");
close (sockfd);
exit(1);
}
}

   //salta el teclado
   if(FD_ISSET(STDIN,&rset)==1){

bzero(buffer,sizeof(buffer));
fgets(buffer,sizeof(buffer),stdin);
if(strlen(buffer)==1){
printf("\n>>>>> nos desconectamos...\n\t Adios\n");
close (sockfd);
exit(1);
}
}

//salta el timeoout
if(ret_select==0){printf("warning");}
}

close(sockfd);
return 0;
}

int generador(){
//generamos la semilla con el numero de proceso
srand(time(NULL));
//genera el numero aleatorio que ira de 0-10
return rand()%11;
}



Lh: No hagas doble post, utiliza el botón modificar.

haber e estado dandole vueltas al tema y creo qe el fallo esta en el servidor para hacer las pruebas adjunto codigo para ver si a alguien se le enciendo la bonbilla por qe la mia esta ya fundida.

//      server.c
//      DE PRUEBA



#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/stat.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#include <fcntl.h>
#include <getopt.h>

#define N 256

int main(int argc, char** argv){

int sockfd,bindfd,connfd;
socklen_t size_cliente;
char buffer[N];
struct sockaddr_in servidor,cliente;


//descriptor del socket
sockfd=socket(AF_INET,SOCK_STREAM,0);

//inicializamos la structura
bzero(&servidor,sizeof(servidor));
servidor.sin_family=AF_INET;
servidor.sin_port=htons(4000);
servidor.sin_addr.s_addr=htonl( INADDR_ANY );

//guardamos los recursos del sistema
bindfd=bind(sockfd,(struct sockaddr*)&servidor,sizeof(servidor));

//capaz de escuchar a la vez

listen(sockfd,5);

size_cliente=sizeof(cliente);

while(1){
connfd=accept(sockfd,(struct sockaddr *)&cliente,&size_cliente);

read(connfd,buffer,256);
printf("%s\n",buffer);
close(connfd);
}

close(sockfd);
return 0;
}
#132
Programación General / Re: Manual de delphi 7
31 Agosto 2005, 11:51 AM
se esta mu bueno
#133
Programación Visual Basic / Re: delphi o vb
30 Agosto 2005, 13:46 PM
e escuchao mucho malo de vb pero delphi qe tiene es un lenguaje libre no
no tiene dependencias de librerias
#134
Programación Visual Basic / delphi o vb
28 Agosto 2005, 14:01 PM
wenas quiria pedir consejo para ver qe lenguaje es mejor delphi o vb  ultimamente el vb esta de moda queria saber cual me da mas prestaciones