• Sábado 27 de Abril de 2024, 18:19

Autor Tema:  Re: Comunicación Por Sockets  (Leído 10938 veces)

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Comunicación Por Sockets
« Respuesta #50 en: Miércoles 12 de Diciembre de 2007, 18:52 »
0
Tenes que arreglar ese constructor ... usa new para los objetos y no te olvides del delete correspondiente.

La diferencia es que se llama al operator = de la clase Socket y eso entre otras cosas aumenta la variable de las referencias (cuando no lo haces al ejecutarse el destructor y quedar sin referencias tambien se ejecuta End que llama a WSACleanup).

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

captaindanieo

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Comunicación Por Sockets
« Respuesta #51 en: Miércoles 12 de Diciembre de 2007, 22:16 »
0
He cambiado las definiciones de los objetos L2cap desde principal. Ahora lo realizo:

L2cap* micapa = new L2cap(1);

Por ejemplo. Y para referirme ahora a los métodos de mi clase, usaré -> en lugar de '.' solo.

Sin embargo el resultado de la ejecución sigue siendo el mismo.

No he entendido bien la última parte de tu último post, Eternal Idol.


Otra cosa que queria comentar es la siguiente. Ejecutando paso por paso, en depuración, observo que el comportamiento, tanto en el servidor como en el cliente es similar en cuanto a lo siguiente: en el constructor, se realizan todas las acciones correspondientes, pero cuando se llega a beginthreadex, da un salto a SocketServer (la primera línea del constructor de la clase) y de ahí pasa a la destrucción del objeto de la clase.

Eso ocurre tanto si elegimos que sea Cliente como si es Servidor. Y ocurre tanto con la definición realizada con new, como con la que tenía antes.

¿Es normal esto?
Ademas, si pongo entre comentarios la línea del beginthreadex (para comprobar si era debido a dicha instrucción), ocurre exactamente lo mismo, solo que el salto se realiza desde la línea anterior. Y si comento la anterior, se realiza desde la anterior (que es un simple cout ), ... No tiene ningún sentido.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Comunicación Por Sockets
« Respuesta #52 en: Miércoles 12 de Diciembre de 2007, 22:22 »
0
Tiene todo el sentido del mundo, lo que se llama es el destructor de los objetos locales que estan en la pila, en cuanto se acaba el constructor su ambito desaparece y por tanto se llama al destructor correspondiente (SocketServer/SocketClient). Lo que tenes que cambiar es el constructor mismo (L2cap::L2cap) como te dije antes.

La ultima parte de mi mensaje anterior explicaba la diferencia en los errores con y sin esa linea bizarra.

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

captaindanieo

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Comunicación Por Sockets
« Respuesta #53 en: Miércoles 12 de Diciembre de 2007, 23:07 »
0
¡Creo que lo logramos! He realizado también las creaciones de los objetos en el constructor de L2CAP para el socket, de la siguiente manera:

En el servidor:

       SocketServer* in = new SocketServer(3000,5);
       Socket* sa = in->Accept();
       s = sa;

En el cliente:

       SocketClient* sb = new SocketClient("localhost",3000);
       s = sb;

Y al hacer esto, ya hay transferencia correcta de información, y no se cierran los sockets. No me lo creia cuando lo veía.

Un millón de gracias Eternal Idol. De verdad, que no creía que lo pudiesemos solucionar, y mas pensando en que en tu máquina funcionaba el mismo código que en la mía no lo hacía. ¿Eso a qué podría haberse debido? Porque los constructores estaban igual de mal declarados antes. ¿Quizás por la forma de hacer las cosas del compilador?

En fin, muchísimas gracias de nuevo por todo, por haberte puesto con el código y haber tenido paciencia para soportar mis dudas y mis no comprobaciones. Mil gracias.

Un saludo muy grande desde Málaga.

Eternal Idol

  • Moderador
  • ******
  • Mensajes: 4696
  • Nacionalidad: ar
    • Ver Perfil
Re: Comunicación Por Sockets
« Respuesta #54 en: Miércoles 12 de Diciembre de 2007, 23:36 »
0
De nadas, ahora revisa todo tu codigo teniendo en cuenta el ambito de las variables ;)

Nacional y Popular En mi país la bandera de Eva es inmortal.


Queremos una Argentina socialmente justa, económicamente libre y  políticamente soberana.
¡Perón cumple, Evita dignifica!


La mano invisible del mercado me robo la billetera.

captaindanieo

  • Miembro activo
  • **
  • Mensajes: 46
    • Ver Perfil
Re: Comunicación Por Sockets
« Respuesta #55 en: Miércoles 12 de Diciembre de 2007, 23:37 »
0
Recibido!  :D  :comp: