Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Destro- en 24 Enero 2011, 19:00 pm



Título: SOCKET:Se me tilda la ventana.
Publicado por: Destro- en 24 Enero 2011, 19:00 pm
Holas :).
Tengo un problemita,cuando pongo el socket a la escucha se me tilda la ventana asta q no resiva paquetes :S.Me dan alguna idea de como puedo solucionarlo xD.
Grax  ;D.


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Erik# en 24 Enero 2011, 19:21 pm
Pon el código para que podamos ver que haces.


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Garfield07 en 24 Enero 2011, 19:44 pm
http://foro.elhacker.net/programacion_cc/tutorial_introducion_a_los_sockets_en_ansi_c_by_sagrini_2010-t317054.0.html
http://foro.elhacker.net/programacion_cc/recopilatorio_temas_importantes_de_programacion_cc-t174285.0.html
http://foro.elhacker.net/programacion_cc/recopilatorio_sources_interesantes-t298479.0.html

Pon el code, anda...
Kasiko eso a mi me lo dijeron como offtopic y falta leve, a ver si te lo ve algun mod jeje ten cuidado...


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Destro- en 24 Enero 2011, 21:50 pm
Grax,pero el problema no esta en el socket,we si pero es porq hace una especie de loop infinito asta resiva paquetes :S.

pd:es una ventana GUI.

int resivir()
{
     WSADATA wsa;
     SOCKET sock;
     struct sockaddr_in local;
     int len=0;
     char Buffer[1024];

     WSAStartup(MAKEWORD(2,0),&wsa);
   
     sock=socket(AF_INET, SOCK_STREAM, 0);

     local.sin_family = AF_INET;
     local.sin_addr.s_addr = INADDR_ANY;
     local.sin_port = htons(1616);

     if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
     {
         return -1;
     }

     if (listen(sock,1)==-1)
     {
         return -1;
     }
     len=sizeof(struct sockaddr);


     sock=accept(sock,(sockaddr*)&local,&len);//cuando llega aca es donde se tilda :S

     while(len!=0)
     {
         len=recv(sock,Buffer,1023,0);

         if (len>0)
         {
               Buffer[len]=0;
               //code...
          }
     }
}


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Garfield07 en 25 Enero 2011, 18:37 pm
Código
  1. #include <winsock2.h>
  2. int main ()
  3. {
  4.     WSADATA wsa;
  5.     SOCKET sock;
  6.     struct sockaddr_in local;
  7.     int len=0;
  8.     char Buffer[1024];
  9.  
  10.     WSAStartup(MAKEWORD(2,0),&wsa);
  11.  
  12.     sock=socket(AF_INET, SOCK_STREAM, 0);
  13.  
  14.     local.sin_family = AF_INET;
  15.     local.sin_addr.s_addr = INADDR_ANY;
  16.     local.sin_port = htons(1616);
  17.  
  18.     if (bind(sock, (SOCKADDR*) &local, sizeof(local))==-1)
  19.     {
  20.         return -1;
  21.     }
  22.  
  23.     if (listen(sock,1)==-1)
  24.     {
  25.         return -1;
  26.     }
  27.     len=sizeof(struct sockaddr);
  28.  
  29.  
  30.     sock=accept(sock,(sockaddr*)&local,&len);//cuando llega aca es donde se tilda :S
  31.  
  32.     while(len!=0)
  33.     {
  34.         len=recv(sock,Buffer,1023,0);
  35.  
  36.         if (len>0)
  37.         {
  38.               Buffer[len]=0;
  39.               //code...
  40.          }
  41.     }
  42. }
  43.  

Vale, no entiendo que quieres decir con "se tilda". Se queda en un bucle infinito? Si es eso lo que pasa es que cuando tu cliente se desconecta no manda nada. Yo lo que hago es
Código:
         if (len>2) 
         {
               Buffer[len]=0;
               //code...
          }
\r\n == Enter en clientes...

Si te has programado tu el cliente, pon el code tmb. Si no, di cual usas...
Para el NC eso asi va bien... cuando el cliente meta un Enter sales del bucle
Y otra cosa, lo de Buffer [len]=0; no tiene ningún sentido. Para que es? Si es para acabar la cadena se suele poner \0. Pero recuerda lo de \r\n

Si no es, explicanos tu problema...


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Destro- en 25 Enero 2011, 22:29 pm
Grax,pero no es el while,es:
Código:
sock=accept(sock,(sockaddr*)&local,&len);
:S,

pd:cuando digo q se tilda es como un bucle infinito,tengo q cerrarlo con el aministrador de tareas :S.


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Garfield07 en 26 Enero 2011, 18:32 pm
Te has leido lo que te dije? Vamos a ver, en el tuto pongo muy claro que accept deja el programa en pausa hasta que se conecta alguien. Haz un nc -vv localhost 31337 (o tu puerto) y sigues...


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Destro- en 26 Enero 2011, 19:39 pm
No lo avia leido  :-[.
mmm,no hay otra forma?,


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Garfield07 en 26 Enero 2011, 20:42 pm
Si que la hay. Podrias probar a usar telnet o puedes descargar un code del foro.
Si usas Win Vista / 7 tienes que activar el telnet.
http://www.google.es/#sclient=psy&hl=es&q=activar+telnet+en+windows+7&aq=4&aqi=g5&aql=&oq=&pbx=1&fp=ae772f8ffcd452a1


Título: Re: SOCKET:Se me tilda la ventana.
Publicado por: Destro- en 26 Enero 2011, 23:43 pm
mmm,ahora me pongo a ver eso.Otra cosa que se me courrio es de crear otro proseso.