Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Garfield07 en 2 Septiembre 2010, 16:26 pm



Título: Trokan.c Ayuda Windows C
Publicado por: Garfield07 en 2 Septiembre 2010, 16:26 pm
Buenas, estoy programando un mini-server en C,  que en Linux he desarrollado bastante mejor, pero necesito en Windows.
He escrito este code para ir mejorandolo, pero "algo" hace que se salte el accept y aunque nadie se conecte salta al siguiente paso xD.

El code:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <winsock.h>
  4.  
  5. int main ()
  6. {
  7.    WSADATA wsaData;
  8.    WSAStartup(MAKEWORD(2, 0), &wsaData);
  9.  
  10.    struct sockaddr_in host, client;
  11.    int a=sizeof (struct sockaddr);
  12.    SOCKET newsock;
  13.    SOCKET sockfd=socket (2, 1, 0);
  14.    host.sin_family=AF_INET;
  15.    host.sin_addr.s_addr=0;
  16.    host.sin_port=htons (31337);
  17.    memset (host.sin_zero, 0, 8);
  18.  
  19.    bind (sockfd, (struct sockaddr*)&host, sizeof (struct sockaddr*));
  20.    listen (sockfd, 1);
  21.    while (1)
  22.    {
  23.        newsock=accept (sockfd, (struct sockaddr*)&client, &a);
  24.        send (newsock, "Hola!\n", 6, 0);
  25.        printf ("Conex. correcta.\n");
  26.        closesocket (newsock);
  27.    }
  28.    closesocket (sockfd);
  29.    return 0;
  30. }
  31.  
Qué falla??? Como ven sale infinitamente el printf!!! Y nadie se conecta!!! Y no te puedes conectar!!!

Saludos y gracias

Saludos


Título: Re: Trokan.c Ayuda Windows C
Publicado por: clodan en 2 Septiembre 2010, 17:05 pm
mira, puede ser que siga asi porqe entra al while y no lo comparas con nada

osea pones while 1... while 1 que? entendes?

osea si pones while tenes qe poner una condicion, onda while (x<1){} y cosas asi, sino va a seguir repitiendose


Título: Re: Trokan.c Ayuda Windows C
Publicado por: bizco en 2 Septiembre 2010, 18:01 pm
no verificas en ningun caso el resultado de las funciones anteriores NECESARIAS para que puedas aceptar conexion alguna. revisa que el fallo esta antes de accept, el tercer parametro de bind no es correcto.


Título: Re: Trokan.c Ayuda Windows C
Publicado por: Garfield07 en 3 Septiembre 2010, 11:30 am
Clodan, no es necesario poner nada mas que un uno porque el computer luego lo pasa a ensamblador y ahi lo que queda es hacer la operacion entre parentesis, si la hay y si el resultado es positivo, o sea, diferente de cero, hace lo que viene entre las llaves.
Hay que ver como de grande es un code con una sola instruccion WHILE!!!

Ya he visto el fallillo xD no es un puntero. Voy a provarlo ahora mismo. Muxas gracias ctlon. Eso normalmente lo hago despues, pero ya ves xD. Lo hago asi para que mientras escribo el code no sea largo, pero va a ser que no!!!

Saludos y gracias a los dos


Título: Re: Trokan.c Ayuda Windows C
Publicado por: Eternal Idol en 3 Septiembre 2010, 14:41 pm
while (1) es un bucle infinito, mejor usar for (;; ) aunque los compiladores modernos no emitan la comparacion redundante con el 1.


Título: Re: Trokan.c Ayuda Windows C
Publicado por: clodan en 3 Septiembre 2010, 14:48 pm
while (1) es un bucle infinito, mejor usar for (;; ) aunque los compiladores modernos no emitan la comparacion redundante con el 1.

Lo mismo me parecio a mi, pero me dijo esto:
jjajaja yo no entiendo mucho todavia asi que lo acepte con sabiduria jejeje

Clodan, no es necesario poner nada mas que un uno porque el computer luego lo pasa a ensamblador y ahi lo que queda es hacer la operacion entre parentesis, si la hay y si el resultado es positivo, o sea, diferente de cero, hace lo que viene entre las llaves.
Hay que ver como de grande es un code con una sola instruccion WHILE!!!

Ya he visto el fallillo xD no es un puntero. Voy a provarlo ahora mismo. Muxas gracias ctlon. Eso normalmente lo hago despues, pero ya ves xD. Lo hago asi para que mientras escribo el code no sea largo, pero va a ser que no!!!

Saludos y gracias a los dos