Citar
No he dicho que no tenga el manejador, el manejador lo tengo la cosa es como enviar al cliente por el socket ya abierto puesto que send envía al servidor.
pero repetimos, el cliente te llama a ti y una leve ojeada a la documentacion:
Citar
If no error occurs, recv returns the number of bytes received and the buffer pointed to by the buf parameter will contain this data received. If the connection has been gracefully closed, the return value is zero.
No he dicho que uses send logicamente, tienes que copiar los datos al buffer y devolver el numero de bytes, tal como si llegasen desde el socket (esto no lo sabe el cliente).
Citar
No sé como dices que de la manera que explicas te funcione, posiblemente sigues sin entender el problema que tengo.
perdona, el que no esta entendiendo eres tu.
Citar
Este es la función hookeada, el packet 0x283 es el de cuando el jugador accede al juego, lo que hace es crear otro thread para enviar el broadcast una vez que ha entrado al juego (esto es lo que hice rápido a tu manera pero de la forma que yo quiero).
eso no es ni por asomo como te digo, si fuese como te digo eso volveria al cliente aun sin que llegasen datos y es eso lo que tienes que controlar tu.
Citar
porque habrá que ejecutar la función (la cual no sé cómo será, tal vez estoy hoy espeso) para enviarle los datos al EXE.
No hay que ejecutar nada, lee la definicion de la funcion otra vez.
Citar
P.D: Para que me entiendas, yo no quiero modificar lo que recibe el EXE (esto ya lo hago para otras cosas), lo que quiero es enviar algo nuevo al EXE desde el dll.
hijo mio, es precisamente lo que te estoy explicando. para que lo entiendas, pilla el codigo de la msdn y compilalo tal cual y observa que espera hasta que el servidor responde. ahora bien aplicale lo que te digo y veras que no espera y que deja la espera retornando WSAETIMEDOUT una vez obtienes el timeout si quieres puedes hacer creer al cliente que le a llegado informacion..... y repito copias los datos al buffer y le devuelves el numero de bytes copiados.
Cuando hay timeout quiere decir que el servidor no envio nada, por eso logicamente no pierdes datos. siendo esto asi, tu eres el encargado de decirle al cliente cuando se a cerrado la conexion. para mas datos http://msdn.microsoft.com/en-us/library/ms740668%28v=VS.85%29.aspx
Despues te queda otra que es hacer que el cliente pase por tu aplicacion para conectarse (a modo proxy local) de esta forma tienes mas facil enviarle cuando quieras datos al cliente ya que para el tu eres el servidor.