elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11
81  Programación / Programación C/C++ / Re: Ayuda con sockets en C (bajo windows) en: 9 Agosto 2012, 20:40 pm
He de advertir que el código del servidor es "improvisado" de una web para compilarlo rápido y probar el cliente por lo que no tiene ni salida de los bucles ni nada, solo para ver si se conectan:
Código
  1. #include <sys/types.h>
  2. #include <sys/socket.h>
  3. #include <stdio.h>
  4. #include <netinet/in.h>
  5. #include <arpa/inet.h>
  6. #include <unistd.h>
  7.  
  8. int main()
  9. {
  10.  
  11. int server_sockfd, client_sockfd;
  12. int server_len, client_len;
  13. struct sockaddr_in server_address;
  14. struct sockaddr_in client_address;
  15. char c[1024];
  16.  
  17.  
  18. server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
  19.  
  20.  
  21. server_address.sin_family = AF_INET;
  22. server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
  23. server_address.sin_port = htons(5000);
  24. server_len = sizeof(server_address);
  25. bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
  26. listen(server_sockfd, 5);
  27.  
  28. client_sockfd = accept(server_sockfd, (struct sockaddr *)&client_address, &client_len);
  29.  
  30. printf("Cliente conectado\n");
  31. for(;;)
  32. {
  33. read(client_sockfd, c, 1024);
  34. printf(c);
  35. }
  36.  
  37. return 0;
  38.  
  39. }
  40.  
82  Programación / Programación C/C++ / Re: Ayuda con sockets en C (bajo windows) en: 9 Agosto 2012, 18:51 pm
Una última pregunta...
El servidor que utilizo corre en Linux y al intentar conectarlo no va (no pasa nada en el servidor y el cliente se cierra como si no hubiese servidor). En cambio, se el servidor es windows si funciona.
¿Hay algún problema corriente entre las conexiones de Winsock y los sockets de linux o es otro error? (He buscado en google pero los casos que vienen están en Java o hablan de portabilidad...)
83  Programación / Programación C/C++ / Re: Ayuda con sockets en C (bajo windows) en: 9 Agosto 2012, 15:34 pm
Ya había encontrado la función pero había entendido mal y creía que había que hacerlo con una librería externa. Gracias.
84  Programación / Programación C/C++ / Ayuda con sockets en C (bajo windows) en: 8 Agosto 2012, 17:23 pm
Buenas. Esta vez mi duda es como puedo utilizar una URL en una comunicación con sockets tcp/ip en windows en vez de la IP. Tengo este código:
Código
  1. #include <windows.h>
  2. #include <winsock2.h> //Para sockets
  3. #include <ws2tcpip.h> //Para sockets
  4.  
  5.  
  6. int main()
  7. {
  8. /*************************** DE LOS SOCKETS **************************/
  9. WSADATA wsa;
  10. int sock;
  11. struct sockaddr_in direccion;
  12.  
  13. WSAStartup(MAKEWORD(2,0),&wsa);
  14.  
  15. if((sock=socket(AF_INET,SOCK_STREAM,0))==-1 )
  16. {
  17. return -1;
  18. }
  19.  
  20. direccion.sin_family=AF_INET;
  21. direccion.sin_port=htons(5000);
  22. direccion.sin_addr.s_addr=inet_addr("192.168.1.35");  
  23.  
  24. if(connect(sock,(struct sockaddr*)&direccion,sizeof(direccion))==-1)
  25. {
  26. return -1;
  27. }
  28. /***********  ....va pa largo......   ************/
  29.  
Es decir, cambiar el 192.168.1.35 por algo como "miurl.com".
Utilizo mingw.
Gracias.
85  Programación / Programación C/C++ / Re: ¿Esto se puede en C? en: 27 Julio 2012, 14:56 pm
¿Pero eso incluiría el tener que ir creando las variables en tiempo de ejecución, para ir luego guardando su dirección en el array, no? ¿Podrías incluir algo de código porfavor?
86  Programación / Programación C/C++ / Re: ¿Esto se puede en C? en: 27 Julio 2012, 12:40 pm
Era solo por curiosidad...
Gracias.
87  Programación / Programación C/C++ / ¿Esto se puede en C? en: 27 Julio 2012, 10:18 am
Buenas. Me pregunto si en C hay alguna forma de asignar a una variable el valor de otra como nombre, por ejemplo, si tengo una cadena (introducida por el usuario o no) que contiene "var1", puedo crear una variable que se llame var1; o si se puede acceder a una variable llamada var2, a través de una cadena como "var2".
-> He buscado en google pero...
-> Gracias.
88  Programación / Programación C/C++ / Re: Juego de Ping-Pong hecho en C. en: 7 Julio 2012, 14:09 pm
-Para instalar la librería ncurses solo teclea en la consola: "sudo apt-get install libncurses5*"
89  Programación / Programación C/C++ / Re: Juego de Ping-Pong hecho en C. en: 3 Julio 2012, 18:06 pm
Buenas durasno. LINES y COLS están definidas por ncurses. ¿Podrías copiar el error que te sale?
90  Programación / Programación C/C++ / Juego de Ping-Pong hecho en C. en: 1 Julio 2012, 19:24 pm
Buenas, aquí tienen el código de un juego de ping-pong hecho en C, el famoso pong, pero con un solo jugador. No se si calificarlo como aporte o no así que, porfavor, decidme errores y mejoras (como los tics esos que parece que tiene aveces). Para compilarlo: gcc -o pong pong.c -lncurses -lpthread
(Es para Linux y se ejecuta en una terminal, utiliza ncurses)

**Un video:


Código
  1. /*
  2. -----Creado por neob
  3. -----Juego de ping-pong.
  4. -----Compilar con gcc -o pong pong.c -lncurses -lpthread .
  5. -----Controles:
  6. -- W - Mover la paleta hacia arriba.
  7. -- S - Mover la paleta hacia abajo.
  8. -- A - Mover la paleta hacia la izquierda.
  9. -- D - Mover la paleta hacia la derecha.
  10. */
  11.  
  12.  
  13. #include <stdio.h> //Simple constumbre....
  14. #include <ncurses.h> //Utilizar ncurses.
  15. #include <math.h> //Funciones para la obtención de números aleatorios ( rand() ).
  16. #include <pthread.h> //Ejecución con varios hilos.
  17. #include <time.h> //Proporciona time() que nos devuelve la hora.
  18.  
  19. /*******************************/
  20. int salir_ncurses(); //Cierra el modo ncurses.
  21. void dibujar_marco(); //Dibuja el marco.
  22. void *hiloposiciones(); //Se encarga de mover la paleta y dibujar la paleta y la pelota.
  23. void *hilomoverpelota(); //Se encarga de mover la pelota.
  24. void dibujar_pelota(); //Dibuja la pelota en una posición aleatoria (la primera vez).
  25. void pintar_paleta(); //Dibuja la paleta (la primera vez).
  26. void direc_aleatoria(); //Una dirección aleatoria para la bola (la primera vez).
  27. void escojer_dificultad(); //Se encarga de la dificultad del juego.
  28. /*******************************/
  29.  
  30.  
  31. /******   VARIABLES   *******/
  32. int x_pelota, y_pelota, x_paleta, y_paleta, dpx_pelota, dpy_pelota, dificultad;
  33. char key; //Guarda la tecla que pulsamos.
  34. /*** Variables para los hilos ***/
  35. pthread_t idhiloposiciones; //Identificador del hilo hiloposiciones
  36. pthread_t idhilomoverpelota; //Identificador del hilo hilomoverpelota.
  37. int error_hilo1, error_hilo2; //Para comprobar que no ha habido errores en los hilos.
  38. /****************************/
  39.  
  40.  
  41. int main()
  42. {
  43. initscr(); //Entramos en ncurses.
  44. noecho(); //Que no salgan las teclas pulsadas.
  45.  
  46.        dibujar_marco(); //Dibujamos las paredes.
  47. pintar_paleta(); //Pintamos la paleta.
  48.        dibujar_pelota();  //Dibujamos la pelota.
  49. direc_aleatoria(); //Para que se mueva la pelota por primera vez (Solo la llamamos aquí).
  50. escojer_dificultad(); //Le preguntamos al jugador la dificultad que quiere que tenga el juego (irá en función de la velocidad de la bola).
  51.  
  52. srand( time(NULL) ); //Cambiamos la semilla de rand.
  53.  
  54. error_hilo1 = pthread_create(&idhiloposiciones, NULL, hiloposiciones, NULL); //Lo creamos.
  55. error_hilo2 = pthread_create(&idhilomoverpelota, NULL, hilomoverpelota, NULL); //Lo creamos.
  56.  
  57. if (error_hilo1 != 0 && error_hilo2 != 0) //Si ha habido error, no podemos seguir adelante.
  58. {
  59. clear();
  60. move(LINES/2,COLS/2);
  61. printw("ERROR AL CREAR HILOS DE EJECUCIÓN.");
  62. return -1;
  63. }
  64.  
  65. while( key != 'e' && key != 'E' )//Si pulsamos E, nos vamos.
  66. {
  67. key = getch();
  68. if (key == 'w' || key == 'W') { x_paleta = x_paleta - 1; }
  69. if (key == 's' || key == 'S') { x_paleta = x_paleta + 1; }
  70. if (key == 'a' || key == 'A') { y_paleta = y_paleta - 1; }
  71. if (key == 'd' || key == 'D') { y_paleta = y_paleta + 1; }
  72. }
  73.  
  74. salir_ncurses(); kill(&idhiloposiciones); kill(&hilomoverpelota); return 0; //Hemos salido pulsando E, salimos de ncurses, matamos los hilos y nos vamos.
  75.  
  76. }
  77.  
  78. void *hiloposiciones()
  79. {
  80. for(;;)
  81. {
  82.    int i; //Para contar.
  83.  
  84.    clear(); //Borramos la pantalla para renovar todas las posiciones.
  85.    dibujar_marco(); //Volvemos a dibujar el marco.
  86.  
  87.            /*************** PALETAS ***********/
  88.            if (y_paleta != 0 && y_paleta <= COLS -1 && x_paleta != 0 && (x_paleta - 3) != LINES - 1) //No vas a atravesar el marco, no¿?
  89.    {
  90.     for( i=0; i<4; i++ )
  91.        {
  92. move(x_paleta + i, y_paleta);
  93. printw("#");
  94.        }
  95.    } else
  96.     {
  97.                   if (y_paleta <= 0)
  98.   {
  99. y_paleta = 1; //Volvemos a ajustarla a 1 (para que no pueda salir del marco por la izquierda).
  100.   for( i=0; i<4; i++ )
  101.                {
  102. move(x_paleta + i, y_paleta);
  103. printw("#");
  104.           }
  105.   }
  106.  
  107.               if (y_paleta >= COLS - 1)
  108.   {
  109.   y_paleta = COLS - 2; //Volvemos a ajustarla a COLS - 2 (para que no pueda salir del marco, pero esta vez por la derecha).
  110.   for( i=0; i<4; i++ )
  111.               {
  112. move(x_paleta + i, y_paleta);
  113. printw("#");
  114.           }
  115.   }
  116.  
  117.               if (x_paleta <= 0) //Para que no se salga por arriba.
  118.   {
  119.   x_paleta = 1;
  120.   for( i=0; i<4; i++ )
  121.               {
  122. move(x_paleta + i, y_paleta);
  123. printw("#");
  124.           }
  125.   }
  126.  
  127.   if ( (x_paleta + 3) >= LINES - 1) //Para que no se salga por debajo.
  128.   {
  129.   x_paleta = LINES - 4;
  130.   for( i=0; i<4; i++ )
  131.               {
  132. move(x_paleta + i, y_paleta);
  133. printw("#");
  134.           }
  135.   }
  136.      }
  137.  
  138.     /***************** PELOTA ******************/
  139.     move(x_pelota, y_pelota); //Segun las posiciones marcadas por el hilo hilomoverpelota...
  140.     printw("O"); // ...pintamos las pelota.
  141.  
  142. /*     //----LO UTILIZO PARA VER LOS ERRORES EN LAS VARIABLES Y EN LAS POSICIONES.
  143.     move(3,3);
  144.     printw("-DEBUG: dpx_pelota=%d; dpy_pelota=%d; x_pelota=%d; y_pelota=%d; x_paleta=%d; y_paleta=%d;", dpx_pelota, dpy_pelota, x_pelota, y_pelota, x_paleta, y_paleta); //DEBUG
  145. */
  146.  
  147.     if (y_pelota <= 0) //Significa que no ha parado la pelota, se acaba el juego.
  148.     {
  149.      kill(idhiloposiciones); kill(idhilomoverpelota);
  150.    clear();
  151.      move(LINES/2,COLS/2);
  152.      printw("FIN DEL JUEGO!");
  153.     }
  154.  
  155.     if ( (y_pelota == y_paleta) && ((x_pelota == x_paleta) || (x_pelota == x_paleta + 1) || (x_pelota == x_paleta + 2)  || (x_pelota == x_paleta + 3)) )
  156.     {
  157.         dpy_pelota = - dpy_pelota; //Si rebota contra la pala, tenemos que cambiar su sentido.
  158.       y_pelota = y_pelota + dpy_pelota; //Después de cambiar su sentido hay que volver a actualizar la posición de la pelota.
  159.     }
  160.  
  161.     usleep(20*1000); //sleep() trabaja con segundos, por eso usamos usleep(), que trabaja con milisegundos.
  162.     refresh(); //Mostramos los cambios en las posiciones.
  163.  
  164. }
  165. }
  166.  
  167. /*************************** MOVIMIENTO PELOTA ***************************/
  168. void *hilomoverpelota()
  169. {
  170. for(;;)
  171. {
  172.     if (!( (y_pelota == y_paleta) && ((x_pelota == x_paleta) || (x_pelota == x_paleta + 1) || (x_pelota == x_paleta + 2)  || (x_pelota == x_paleta + 3))) )
  173.     {  
  174.                     x_pelota = x_pelota + dpx_pelota; //Si no está rebotando con la pala, tiene que continuar su camino, por lo que sigue por su camino.
  175.     y_pelota = y_pelota + dpy_pelota;
  176.     }
  177.  
  178.     if (x_pelota <= 1) //Para que la pelota rebote contra la pared.
  179.     {
  180.     dpx_pelota = - dpx_pelota;
  181.     }
  182.  
  183.     if (x_pelota >= LINES - 1) //Para que la pelota rebote contra la pared.
  184.     {
  185.     dpx_pelota = - dpx_pelota;    
  186.     }
  187.  
  188.     if (y_pelota >= COLS - 1) //Para que la pelota rebote contra la pared.
  189.     {
  190.     dpy_pelota = - dpy_pelota;    
  191.     }
  192.  
  193.     usleep( dificultad*1000 );
  194. }
  195. }
  196.  
  197.  
  198.  
  199.  
  200.  
  201. /************ Funciones secundarias como dibujar objetos, salir de ncurses, ... ******************/
  202.  
  203. int salir_ncurses()
  204. {
  205. endwin();
  206. return 0;
  207. }
  208.  
  209. void dibujar_marco()
  210. {
  211. int i;
  212.        for(i=0;i<LINES;i++) //Pintamos las paredes: LINES indica el numero de lineas de la terminal y COLS el de columnas (proporcionados por la librería ncurses).
  213.        {
  214.         move(i,0);
  215.         printw("|");
  216.         move(i,COLS - 1);
  217.         printw("|");
  218.        }
  219.  
  220. for(i=0;i<COLS-1;i++)
  221. {
  222. move(0,i);
  223. printw("_");
  224. move(LINES -1,i);
  225. printw("_");
  226. }
  227. }
  228.  
  229. void dibujar_pelota() //Dibujamos la pelota (en una posicion aleatoria dentro de un margen).
  230. {
  231. x_pelota = (int) ( rand() % ((LINES/2+4)-(LINES/2-4)+1) + (LINES/2 - 4) ); //Escojemos un numero aleatorio con rand().
  232. y_pelota = (int) ( rand() % ( (((COLS-1) - COLS/9) + 4)-(((COLS-1) - COLS/9) - 4)+1 ) + (((COLS-1) - COLS/9) - 4) );
  233. move(x_pelota, y_pelota);
  234. printw("O");
  235. }
  236.  
  237.  
  238. void pintar_paleta() //Pintamos la paleta.
  239. {
  240. int i;
  241. y_paleta = 3; // Eje y > columnas
  242. x_paleta = LINES/2 - 3; // Eje x >> líneas
  243.  
  244. for( i=0; i<4; i++ )
  245. {
  246. move(x_paleta + i, y_paleta);
  247. printw("#");
  248. }
  249. }
  250.  
  251. void direc_aleatoria() //Elejimos una primera dirección aleatoria para la pelota.
  252. {
  253. dpx_pelota = ( rand() % (+1 - (-1) +1) + (-1) );
  254. dpy_pelota = -1;
  255.  
  256. }
  257.  
  258.  
  259. void escojer_dificultad() //Escojemos la dificultad del juego.
  260. {
  261. char d;
  262. clear();
  263. move(3,3);
  264. printw("\n-Creado por Juan Escudero Pedrosa.\n"
  265.       "-Indique el nivel de dificultad:\n"
  266.       "\t1 - Fácil.\n"
  267.       "\t2 - Medio.\n"
  268.       "\t3 - Difícil.\n\n"
  269.       "\t(Los controles son W,S,A y D)");
  270. d = getch();
  271. switch(d)
  272. {
  273. case '1': dificultad = 200; break;
  274. case '2': dificultad = 100; break;
  275. case '3': dificultad = 50; break;
  276. default:
  277. clear();
  278. move(3,3);
  279. printw("No se ha seleccionado ningún nivel de dificultad, se tomará por defecto el nivel 2 (Medio). Pulse una tecla para continuar.");
  280.                dificultad = 100;
  281. getch();
  282. break;
  283. }
  284.  
  285. }
  286.  
Páginas: 1 2 3 4 5 6 7 8 [9] 10 11
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines