• Viernes 15 de Noviembre de 2024, 18:47

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - noob.9412

Páginas: [1]
1
Servidores / Como enviar un dato a traves de sockets en windows c++
« en: Viernes 7 de Septiembre de 2012, 21:54 »
 :ayuda:Hola colegas pasa que yo hice un programa cliente-servidor en donde el cliente se conecta al servidor y si el cliente lo desea se conecta. Entonces los programas se envian entre si unas cadenas de caracteres. Pero ahora que pasa si quiero enviar por ejemplo una varible de tipo int o de algun otro tipo? , como lo hago ? . Por favor si alguien sabe como se hace que por favor me ayude. Aqui les dejo el codigo fuente del cliente y el servidor. Pueden ejecutar el programa en su misma pc:

.:SERVIDOR:.

servidor.cpp

Código: C++
  1.  
  2. #include "stdafx.h"
  3.  
  4. using namespace std;
  5. char mensaje[500]="Oscar Julio Acosta Gonzalez";
  6. char mensaje2[500];
  7.  
  8. void main()
  9. {
  10.         int respuesta;
  11.         WSAData wsaData;
  12.         WORD DLLVERSION;
  13.         DLLVERSION = MAKEWORD(2,1);
  14.  
  15.         respuesta = WSAStartup(DLLVERSION, &wsaData);
  16.  
  17.         SOCKADDR_IN addr;
  18.         int addrlen = sizeof(addr);
  19.         SOCKET sListen;
  20.         SOCKET sConnect;
  21.  
  22.         sConnect = socket(AF_INET,SOCK_STREAM,NULL);
  23.         addr.sin_addr.s_addr = inet_addr("192.168.1.1");
  24.         addr.sin_family = AF_INET;
  25.         addr.sin_port = htons(1234);
  26.  
  27.         sListen = socket(AF_INET,SOCK_STREAM,NULL);
  28.         bind(sListen, (SOCKADDR*) &addr, sizeof(addr));
  29.         listen(sListen, SOMAXCONN);
  30.  
  31.  
  32.         for(;;){
  33.  
  34.                 cout << "Esperando por conexiones entrantes" << endl;
  35.  
  36.                 if(sConnect = accept(sListen,(SOCKADDR*)&addr,&addrlen))
  37.                 {
  38.                         cout << "Una conection fue encontrada" << endl;
  39.                         respuesta = send(sConnect,mensaje,100,NULL);
  40.                         respuesta = recv(sConnect,mensaje,sizeof(mensaje),NULL);
  41.  
  42.                 }
  43.  
  44.         }
  45.  
  46.  
  47. }
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  

LIBRERIAS NECESARIAS

Código: C++
  1. stdafx.h
  2.  
  3. // stdafx.h: archivo de inclusión de los archivos de inclusión estándar del sistema
  4. // o archivos de inclusión específicos de un proyecto utilizados frecuentemente,
  5. // pero rara vez modificados
  6. //
  7.  
  8. #pragma once
  9. #pragma comment(lib,"Ws2_32.lib") ;
  10. #include "targetver.h"
  11. #include <tchar.h>
  12. #include <sdkddkver.h>
  13. #include <conio.h>
  14. #include <stdio.h>
  15. #include <WinSock2.h>
  16. #include <Windows.h>
  17. #include <iostream>
  18.  
  19.  
  20.  
  21. // TODO: mencionar aquí los encabezados adicionales que el programa necesita
  22.  

--------------------------------------------------------------------------------------------

.:CLIENTE:.

cliente.cpp

Código: C++
  1. #include "stdafx.h"
  2.  
  3. using namespace std;
  4. string confirm;
  5. string strmensaje;
  6. char mensaje[500];
  7. char mensaje2[500]="Mensaje Recivido";
  8.  
  9. void main()
  10. {
  11.         int respuesta;
  12.         WSAData wsaData;
  13.         WORD DLLVersion;
  14.         DLLVersion = MAKEWORD(2,1,);
  15.         respuesta = WSAStartup(DLLVersion, &wsaData);
  16.  
  17.         SOCKADDR_IN addr;
  18.         int addrlen = sizeof(addr);
  19.         SOCKET sConnect;
  20.  
  21.         sConnect = socket(AF_INET,SOCK_STREAM,NULL);
  22.         addr.sin_addr.s_addr = inet_addr("192.168.1.1");
  23.         addr.sin_family = AF_INET;
  24.         addr.sin_port = htons(1234);
  25.  
  26.         cout << "Quieres conectarte al servidor? [S/N]" << endl;
  27.         cin >> confirm;
  28.  
  29.         if(confirm== "N")
  30.         {
  31.                 exit(1);
  32.         }
  33.         else
  34.         {
  35.                 if(confirm == "S")
  36.                 {
  37.                         connect(sConnect,(SOCKADDR*)&addr, sizeof(addr));
  38.                         respuesta = recv(sConnect,mensaje,sizeof(mensaje),NULL);
  39.                         respuesta = send(sConnect,mensaje2,100,NULL);
  40.                         strmensaje = mensaje;
  41.                         cout << strmensaje << endl;
  42.  
  43.                         getchar();
  44.                 }
  45.         }
  46.  
  47.         getchar();
  48. }
  49.  


LIBRERIAS NECESARIAS

Código: C++
  1. stdafx.h
  2.  
  3.  
  4. // stdafx.h: archivo de inclusión de los archivos de inclusión estándar del sistema
  5. // o archivos de inclusión específicos de un proyecto utilizados frecuentemente,
  6. // pero rara vez modificados
  7. //
  8.  
  9. #pragma once
  10. #pragma comment(lib,"Ws2_32.lib")
  11.  
  12. #include "targetver.h"
  13. #include <stdio.h>
  14. #include <tchar.h>
  15. #include <sdkddkver.h>
  16. #include <iostream>
  17. #include <WinSock2.h>
  18. #include <Windows.h>
  19. #include <string>
  20.  
  21.  
  22.  
  23.  
  24.  
  25. // TODO: mencionar aquí los encabezados adicionales que el programa necesita
  26.  

2
Programación de Videojuegos / Problema con movimiento de sprite SDL c++
« en: Domingo 26 de Agosto de 2012, 16:21 »
Hola colegas soy nuevo en este foro,espero que puedan ayudarme con este problemita. Pasa que quiero pasar este fragmento de pseudocodigo a c++ y no se como hacerlo:

if ( tecla_arriba AND NOT tecla_izquierda AND NOT tecla_derecha){ y--  }
if ( tecla_abajo AND NOT tecla_izquierda AND NOT tecla_derecha){ y++  }
if ( tecla_izquierda AND NOT tecla_arriba AND NOT tecla_abajo){ x--  }
if ( tecla_derecha AND NOT tecla_arriba AND NOT tecla_abajo){ x++  }

Esto haria que el personaje solo se se moviera en las direcciones arriba,abajo,derecha y izquierda y que no lo hiciera diagonalmente.El problema es que soy nuevo programando y no se como colocar eso en una expresion C++ utilizando la libreria SDL. Aqui les dejo un codigo de ejemplo:

Código: C++
  1. #include <stdio.h>
  2. #include <SDL.h>
  3.  
  4. void TECLADO();
  5.  
  6. SDL_Surface *pantalla;
  7. SDL_Event evento;
  8. SDL_Rect pj_r;
  9. SDL_Rect fondo_r;
  10.  
  11. bool salir = false;
  12. char TITULO[]="CODIGO BASICO SDL";
  13. int VEL = 1;
  14. int vel_x = 0;
  15. int vel_y = 0;
  16. int bbb = 0;
  17.  
  18. int main(int argc, char *argv[])
  19. {
  20.  
  21.         SDL_Init( SDL_INIT_VIDEO );
  22.         SDL_WM_SetCaption( TITULO, NULL );
  23.         pantalla = SDL_SetVideoMode(640,480,24,SDL_HWSURFACE);
  24.        
  25.         pj_r.x = 0;
  26.         pj_r.y = 0;
  27.         pj_r.w = 50;
  28.         pj_r.h = 50;
  29.  
  30.         fondo_r.x = 0;
  31.         fondo_r.y = 0;
  32.         fondo_r.w = 640;
  33.         fondo_r.h = 480;
  34.  
  35.         while( salir == false )
  36.     {
  37.                 while( SDL_PollEvent( &evento ) )
  38.         {
  39.                         TECLADO();
  40.                         if( evento.type == SDL_QUIT ){ salir = true; }
  41.                         if(evento.key.keysym.sym == SDLK_ESCAPE ){ salir = true;}
  42.  
  43.                 }//FIN WHILE #2
  44.  
  45.                 pj_r.x += vel_x;
  46.                 pj_r.y += vel_y;
  47.  
  48.                 if(pj_r.x<0)pj_r.x=0;
  49.                 if(pj_r.x+50>640)pj_r.x-= vel_x;
  50.                 if(pj_r.y<0)pj_r.y=0;
  51.                 if(pj_r.y+50>480)pj_r.y-= vel_y;
  52.                
  53.                 SDL_FillRect(pantalla,&fondo_r,SDL_MapRGB(pantalla->format,0,0,0));
  54.                 SDL_FillRect(pantalla,&pj_r,SDL_MapRGB(pantalla->format,255,255,0));
  55.                 SDL_Flip(pantalla);
  56.                
  57.  
  58.         }//FIN WHILE #1
  59.        
  60.         SDL_Quit ();
  61. return 0;
  62. }
  63.  
  64. void TECLADO(){
  65.  
  66. if( evento.type == SDL_KEYDOWN )
  67.     {
  68.         switch( evento.key.keysym.sym )
  69.         {
  70.                         case SDLK_UP: vel_y -= VEL; break;
  71.                         case SDLK_DOWN: vel_y += VEL;  break;
  72.             case SDLK_LEFT: vel_x -= VEL;  break;
  73.             case SDLK_RIGHT: vel_x += VEL;  break;
  74.                 }
  75.     }
  76.    
  77.     else if( evento.type == SDL_KEYUP )
  78.     {
  79.         switch( evento.key.keysym.sym )
  80.         {
  81.             case SDLK_UP: vel_y += VEL; break;
  82.             case SDLK_DOWN: vel_y -= VEL; break;
  83.             case SDLK_LEFT: vel_x += VEL; break;
  84.             case SDLK_RIGHT: vel_x -= VEL; break;
  85.                 }
  86.     }
  87.  
  88. }
  89.  
  90.  
  91.  

No necesitan imagenes externas ya que estas son generadas por codigo. Si presionan las teclas de modo que el pj (cuadrado amarillo) se mueva diagonalmente veran cual es mi problema. lo que quiero es que solo se mueva vertical y horizontal mente. Estare esperando por sus respuestas , por favor ayudenme¡¡¡ :ayuda:

*NOTA: Utilizo la libreria SDL



Páginas: [1]