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

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [duda] Servidor-cliente juntos? [CONSEGUIDO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [duda] Servidor-cliente juntos? [CONSEGUIDO]  (Leído 3,613 veces)
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
[duda] Servidor-cliente juntos? [CONSEGUIDO]
« en: 23 Abril 2010, 18:54 pm »

Hola.
esque estoy intentando hacer street fighter "online por asi decirlo" poco a poco conforme voy aprendiendo.
y mi problema llega aqui.

e conseguido que desde el cliente se mueva el pj en servidor.

pero ahora supongomago para hacer 1 partida de 1vs1:

PC 1 envia informacion al PC 2 . "PC 1 cliente, PC 2 servidor"
PC 2 actualiza los datos enviados del PC 1.
PC 2 envia informacion al PC1 . "PC 2 cliente , PC 1 servidor"
PC 1 actualiza los datos enviados del PC2.

...

para hacer esto deberian de ser servidor-cliente.
eso se puede hacer?
Nuevo code.
explico.
si se pone el exit(1) en el punto indicado se cierra hasta a i bien. peor el problema es que hay 1 orden antes que no la hace, que es guardar X datos en el archivo externo
Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <SDL/SDL.h>
  4. #include <SDL/SDL_image.h>
  5. #include <SDL/SDL_net.h>
  6. using namespace std;
  7. SDL_Surface *screen;
  8. SDL_Event evento;
  9. Uint8 *tecla;
  10. ////////////////////////////////////////////////////////////
  11. ofstream LOG("log.txt",ios::out);
  12. ofstream ERROR("error.txt",ios::out);
  13. ////////////////////////////////////////////////////////////
  14. IPaddress ipservidor,*ipremitente,ipcliente;
  15. TCPsocket sservidor,sremitente,scliente;
  16. ////////////////////////////////////////////////////////////
  17. ////////////////////////////////////////////////////////////
  18. char DATOS[10];
  19. int main(int argc,char *argv[]){
  20.    SDL_Init(SDL_INIT_VIDEO);
  21.    SDLNet_Init();
  22.    screen=SDL_SetVideoMode(540,480,32,SDL_SWSURFACE);
  23.    SDL_WM_SetCaption("Servidor-Cliente, By Xafi ...",0);
  24.    //servidor
  25.    SDLNet_ResolveHost(&ipservidor,0,2000);
  26.    sservidor=SDLNet_TCP_Open(&ipservidor);
  27.  
  28.    //cliente
  29.    SDLNet_ResolveHost(&ipcliente,"127.0.0.1",2000);
  30.    scliente=SDLNet_TCP_Open(&ipcliente);
  31.    //
  32.    while(1){
  33.        SDL_Delay(30);
  34.        //LOG << "\nCONEXIONES: \tServidor: " << SDLNet_Read32(&ipservidor.host) << "\tCliente: " << SDLNet_Read32(&ipremitente->host);
  35.        SDLNet_TCP_Send(scliente,"cliente conectado",512);
  36.        if(sremitente=SDLNet_TCP_Accept(sservidor)){
  37.            ERROR << "CONECTADO";
  38.            ipremitente=SDLNet_TCP_GetPeerAddress(sremitente);
  39.            while(1){
  40.                LOG << "\nCONEXION: " << SDLNet_Read32(&ipremitente->host);
  41.                //pongan la siguiente linea
  42.                //exit(1)
  43.                SDLNet_TCP_Recv(sremitente,DATOS,512);
  44.                tecla=SDL_GetKeyState(0);
  45.                SDL_PollEvent(&evento);
  46.                if(tecla[SDLK_ESCAPE])exit(1);
  47.            }
  48.        }
  49.        else ERROR << "\n" << SDLNet_GetError();
  50.    }
  51.  
  52. }
  53.  
  54.  


« Última modificación: 28 Abril 2010, 12:37 pm por Xafirot » En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
Foxy Rider


Desconectado Desconectado

Mensajes: 2.407


Deprecated


Ver Perfil WWW
Re: [duda] Servidor-cliente juntos?
« Respuesta #1 en: 24 Abril 2010, 01:09 am »

Este tema se había planteado antes (creo xD)... y la cosa depende ... depende de cuantos clientes quieras escalar ...
usando el método de cliente-servidor/PC con varias compus terminás con que el ancho de banda se dispara de forma exponencial con cada máquina que agregás ... (muchas computadoras notificándose las unas a las otras sobre updates) y salvo que implementes un buen balancing de carga, no se sostiene... salvo que se aminore usando un modelo de cliente y servidor ..

Además de que con ese balancing tirás para arriba las posibilidades de "chitear" ...   la cantidad de datos procesados en el server es inversamente proporcional a la probabilidad de hacer un cheat  ... (y directamente proporcional a la dificultad de hacerlo)

Lo importante es pensar en términos de diffs (de updates o actualizaciones) y  de compresión a nivel bit ....
también e ideal sería predicción de acciones, pero esto es opcional ....

todo lo que puedas empaquetar y que no se te vaya del rango de número de bits, empaquetalo .... y sobre todo evitá la redundancia (lo que pueda calcularse en base a otras cosas, calculalas ...), date una idea que tenés que mantener un flujo constante de información si no querés que la info se vea "rara" o cortada ... 30 updates sobre segundo aproximadamente para mantener un flujo constante ...

podés armar algo muy básico con aproximadamente 8 bytes por update ...

hay un ejercicio interesante, y es ponerse a ver todo lo que podrías o deberías transmitir en cada update (es decir el qué podés hacer para determinar cuanto tenés que enviar y cada cuanto), pasarlo a en cuanto pesaría, y multiplicarlo por la cantidad de updates por segundo ... y ahí te das cuenta del problema y prioridad "ancho de banda" (y de lo que sería plantear un buen esquema de actualizacion tanto del lado cliente y servidor)

por eso diría que no te malcríes con librerías de alto nivel para lo que es redes, salvo que te den flexibilidad de hacer cosas de bajo nivel (esto te lo digo por si las dudas, nunca miré ni de lejos SDL_Net, es mandar fruta para tu caso, ví otras y no me gustaron ... pero por si aplica, siempre usé mis propias clases basadas en sockets a pelo por que te permite esbozar bien lo que querés y como querés mandarlo)


Saludos.


« Última modificación: 24 Abril 2010, 01:25 am por vertex@Symphony » En línea

anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [duda] Servidor-cliente juntos?
« Respuesta #2 en: 24 Abril 2010, 11:54 am »

vertex@Symphony gracias por lo que me has dicho lo tendre en cuenta.
pero no soy experto como para hacerme 1 libreria de sockets, ni mucho menos si, ni siquiera ser usar SDLNet, que la veo muy facil pero el problema es que se me cuelga si hago 2 llamadas a

socket_s=SDLNet_TCP_Open(&ip_s); // esta para recivir
socket_c=SDLNet_TCP_Open(&ip_c);// esta para mandar
XS
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [duda] Servidor-cliente juntos?
« Respuesta #3 en: 26 Abril 2010, 23:05 pm »

actualizado. ayudenme por favor
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
anonimo12121


Desconectado Desconectado

Mensajes: 1.813


Ver Perfil WWW
Re: [duda] Servidor-cliente juntos? [CONSEGUIDO]
« Respuesta #4 en: 28 Abril 2010, 12:39 pm »

Bueno la idea me vino mientras miraba mis plantas de mariahachis XD.


aqui esta el code. con alto indice de fallos y errores e conseguid conectar .
creo que se cuales son los fallos intentare arreglarlo.
pero lo principal que e conseguido hacer servidor-cliente.

Código
  1. #include <iostream>
  2. #include <fstream>
  3. #include <SDL/SDL.h>
  4. #include <SDL/SDL_image.h>
  5. #include <SDL/SDL_net.h>
  6. using namespace std;
  7. SDL_Surface *screen;
  8. SDL_Event evento;
  9. Uint8 *tecla;
  10. ////////////////////////////////////////////////////////////
  11. ofstream LOG("log.txt",ios::out);
  12. ofstream ERROR("error.txt");
  13. ////////////////////////////////////////////////////////////
  14. IPaddress ipservidor,*ipremitente,ipcliente;
  15. TCPsocket sservidor,sremitente,scliente;
  16. int opcion=0;
  17. int cl=0;
  18. ////////////////////////////////////////////////////////////
  19. ////////////////////////////////////////////////////////////
  20. char DATOS[512];
  21. int main(int argc,char *argv[]){
  22.    SDL_Init(SDL_INIT_VIDEO);
  23.    SDLNet_Init();
  24.    screen=SDL_SetVideoMode(540,480,32,SDL_SWSURFACE);
  25.    SDL_WM_SetCaption("Servidor-Cliente, By Xafi ...",0);
  26.    //servidor
  27.    SDLNet_ResolveHost(&ipservidor,0,2000);
  28.    //sservidor=SDLNet_TCP_Open(&ipservidor);
  29.    //cliente
  30.    SDLNet_ResolveHost(&ipcliente,"127.0.0.1",2000);
  31.    //scliente=SDLNet_TCP_Open(&ipcliente);
  32.    while(1){
  33.        SDL_Delay(30);
  34.        tecla=SDL_GetKeyState(0);
  35.        SDL_PollEvent(&evento);
  36.        if(tecla[SDLK_ESCAPE])exit(1);
  37.        if(opcion==0){
  38.            if(tecla[SDLK_s]){
  39.                opcion=1;
  40.                cl=1;
  41.  
  42.            }
  43.            if(tecla[SDLK_c]){
  44.                opcion=2;
  45.                cl=2;
  46.  
  47.            }
  48.        }
  49.        //sservidor=SDLNet_TCP_Open(&ipservidor);
  50.        if(opcion==1){
  51.            if(cl==2 || cl==3)SDLNet_TCP_Close(scliente);
  52.            sservidor=SDLNet_TCP_Open(&ipservidor);
  53.            LOG << "\nCONEXIONES: \tServidor: " << SDLNet_Read32(&ipservidor.host);
  54.            while(1){
  55.                if(sremitente=SDLNet_TCP_Accept(sservidor)){
  56.                    ERROR << "CONECTADO";
  57.                    ipremitente=SDLNet_TCP_GetPeerAddress(sremitente);
  58.                    LOG << "\nCONEXION: " << SDLNet_Read32(&ipremitente->host);
  59.                    SDLNet_TCP_Recv(sremitente,DATOS,512);
  60.                    break;
  61.                }
  62.            }
  63.            opcion=2;
  64.            cl=3;
  65.        }
  66.        if(opcion==2){
  67.            if(cl==1 || cl==3)SDLNet_TCP_Close(sservidor);
  68.            scliente=SDLNet_TCP_Open(&ipcliente);
  69.            SDLNet_TCP_Send(scliente,"datos",512);
  70.            SDLNet_TCP_Close(scliente);
  71.            opcion=1;
  72.            cl=3;
  73.        }
  74.    }
  75.  
  76. }
  77.  
  78.  
En línea

Página para ganar Bitcoins y Dinero: http://earnbit.hol.es/
Video de YouTube con Hack para el LoL: http://adf.ly/5033746/youtube-lolemuhack
Si quieres ganar dinero con adfly entra y registrate aquí -> http://adf.ly/?id=5033746
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
He conseguido entrar en el servidor de mi instituto
Hacking
EliteJockey 2 1,778 Último mensaje 6 Febrero 2019, 16:25 pm
por EliteJockey
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines