• Miércoles 20 de Noviembre de 2024, 12:44

Autor Tema:  Ayuda Con Socket En C++  (Leído 1946 veces)

Vics

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Ayuda Con Socket En C++
« en: Lunes 29 de Mayo de 2006, 18:54 »
0
Hola, oigan necesito ayuda con un juego que estoy haciendo, es un juego 3D diseñado con OGRE como motor grafico, consiste basicamente en 2 tanques que se disparan a larga distancia en un tereno 3D y la idea es que sea multiplayer por eso queria saber si alguno de ustedes sabe como puedo hacer esto, porque me imagino que no debe ser muy dificil pero no tengo idea como conectar los  PCs con socket en C++.

Eso es si alguien tuviera una idea o algun codigo por ahi que me pueda servir se lo agradeceria mucho.

Vics

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Ayuda Con Socket En C++
« Respuesta #1 en: Lunes 29 de Mayo de 2006, 19:47 »
0
Bueno, eso depende de que OS hablamos.
Supongo que lo vas hacer por UDP.
includ <sys/sockets.h>
int socket(int family, int type, int protocol)
...
int closesocket(int socket)
Bueno era algo asi, no se de C++, pero tienes que saber en que OS, porque no todas son compatibles con la de BSD libnet
http://en.wikipedia.org/wiki/Berkeley_socakets
 :hola:
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Vics

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Ayuda Con Socket En C++
« Respuesta #2 en: Lunes 29 de Mayo de 2006, 19:53 »
0
lo quiero hacer en wiin xp

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Ayuda Con Socket En C++
« Respuesta #3 en: Lunes 29 de Mayo de 2006, 19:58 »
0
Busca un código de un ejemplo de chat por TCP/IP basado en un servidor central, es decir todos los mensajes van primero al servidor y luego a las máquinas de los usuarios.

Luego tienes que definir prefijos para tus comandos, cada comando debe tener un prefijo distinto y debe tener una longitud fija. Si necesitas enviar informacion de longitud variable indica la cantidad de bytes previamente.

Por ejemplo:

cNXXXXYYYYZZZZ

Podría significar las coordenadas "c" de un tanque "N", 3 numeros en punto flotante de simple precisión (cada letra corresponderia a un byte y tendrias que enviar y recibir arreglos de bytes).

Y esto:
dN

Podria significar que el tanque N hace un disparo.

Tienes que agregar además un buffer de recepción y procesar los mensajes a medida que se completan por que te puede llegar todo junto como:

cNXXXXYYYYZZZZdNdNdNcNXXXXYYYYZZZZ

Asi que tu codigo tiene que saber separar cada mensaje, sabiendo que cada uno tiene un prefijo único y una longitud fija es mejor.

Pero tambien te puede llegar esto:

cNXXXXYY

y luego recien el resto:

YYZZZZdNdNdNcNXXXXYYYYZZZZ

Asi que también tienes que poder reconocer cuando aún no ha llegado todo el mensaje y tienes que esperar hasta que este completo.
Una forma fácil es verificar que la cantidad de bytes que tienes en el buffer es mayor o igual a la longitud del mensaje actual que estas procesando.

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Ayuda Con Socket En C++
« Respuesta #4 en: Lunes 29 de Mayo de 2006, 20:05 »
0
Cita de: "su -"
Bueno, eso depende de que OS hablamos.
Supongo que lo vas hacer por UDP.
includ <sys/sockets.h>
int socket(int family, int type, int protocol)
...
int closesocket(int socket)
Bueno era algo asi, no se de C++, pero tienes que saber en que OS, porque no todas son compatibles con la de BSD libnet
http://en.wikipedia.org/wiki/Berkeley_socakets
 :hola:
Por UDP es más complicado por que no te asegura que los datagramas lleguen en orden ni que todos lleguen. Generalmente usando UDP envian informacion que se desactualiza constantemente, como la posición de un objeto cuando se esta moviendo. Si el datagrama no llega en orden entonces es informacion caduca y se tiene que desechar por que antes llego otra informacion más actual. Pero si el objeto se detiene es mejor asegurar que ese mensaje si llege a todos y en el orden correcto. Por esto te recomendaria que comiences con TCP y luego si lo ves necesario optimizas usando en parte UDP para algunas cosas.

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: Ayuda Con Socket En C++
« Respuesta #5 en: Lunes 29 de Mayo de 2006, 22:36 »
0
Si Amilius, tienes razon, es solo que en la mayoria de juegos usan UDP, pero como bien dices tienen sus problemas.
La opcion que plantea Amilius del estilo chat (por TCP) en muy buena, pero si tienes una conetion regular no sera lo mas indicado.
Puedes usar SDL_net, o usa otros APIs como este:
http://freshmeat.net/projects/raknet/
Por sierto, puse el link de wikipedia mal:
http://en.wikipedia.org/wiki/Berkeley_sockets
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

Vics

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Ayuda Con Socket En C++
« Respuesta #6 en: Miércoles 31 de Mayo de 2006, 18:20 »
0
A gracias por la ayuda, eso si l oque yo quiero hacer e sun multiplayer per o a traves de una red local noma no por internet ni nada asi, es algo mas simple...
Parece que no me di a entender bien, hay alguna fomr amas facild e hacerlo ?