• Martes 14 de Mayo de 2024, 08:29

Autor Tema:  MFC: ¿Cómo enviar un mensaje de un método a otro?  (Leído 1344 veces)

SlackDeb

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
MFC: ¿Cómo enviar un mensaje de un método a otro?
« en: Lunes 5 de Abril de 2010, 04:21 »
0
Hola:
 Tengo un servidor escrito en visual c++, y estoy atascado tratando de enviar un mensaje de la funcion iniciaescucha a la funcion onaccept. La verdad es que no se como hacerlo.
 
El codigo es el siguiente:

Código: Text
  1. void CSocketEscuchaP::OnAccept(int nErrorCode)
  2. {
  3.     if (nErrorCode == 0)
  4.     {
  5.         OTRACE("Conexión establecida");
  6.         m_pFrame->Conecta();
  7.     }
  8.  }
  9.  
  10.  
  11.  
  12. BOOL CSocketEscuchaP::IniciaEscucha(CMainFrame *pFrame, UINT nPort)
  13. {
  14.     ASSERT(pFrame);
  15.  
  16.     m_pFrame = pFrame;
  17.  
  18.  
  19.  
  20.         /* Create socket for incoming connections */
  21.     if ((servSock = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0)
  22.         return FALSE;
  23.  
  24.     /* Construct local address structure */
  25.     memset(&echoServAddr, 0, sizeof(echoServAddr));   /* Zero out structure */
  26.     echoServAddr.sin_family = AF_INET;                /* Internet address family */
  27.     echoServAddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Any incoming interface */
  28.     echoServAddr.sin_port = htons(nPort);      /* Local port */
  29.  
  30.     /* Bind to the local address */
  31.     if (bind(servSock, (struct sockaddr *) &echoServAddr, sizeof(echoServAddr)) < 0)
  32.         return FALSE;
  33.  
  34.  
  35.     /* Mark the socket so it will listen for incoming connections */
  36.     if (listen(servSock, 1) < 0)
  37.         return FALSE;
  38.  
  39.  
  40.     for (;;) /* Run forever */
  41.     {
  42.         /* Set the size of the in-out parameter */
  43.         clntLen = sizeof(echoClntAddr);
  44.  
  45.         /* Wait for a client to connect */
  46.      [color=#FF0000] if ((clntSock = accept(servSock, (struct sockaddr *) &echoClntAddr, &clntLen)) < 0)[/color]
  47.             MessageBox(0,"Error en IniciaEscucha","SocketEscuchaP.cpp",0);
  48.  
  49.         else
  50.         {
  51.             break;
  52.         }
  53.      }
  54. return TRUE;
  55. }
  56.  

La idea es que si accept es correcto se envie un mensaje a la funcion onaccept, la cual establece una conexion en otra clase.

SlackDeb

  • Nuevo Miembro
  • *
  • Mensajes: 17
    • Ver Perfil
Re: MFC: ¿Cómo enviar un mensaje de un método a otro?
« Respuesta #1 en: Lunes 5 de Abril de 2010, 18:46 »
0
Despues de mirar algunos codigos MFC, he podido llegar a lo sgte:
He añadido lo siguiente al archivo CSocketEscuchaP.h
Código: Text
  1. #define WM_MYMESSAGE1 WM_USER
  2. afx_msg void OnAccept(WPARAM wParam, LPARAM lParam);//le agregué el afx_msg
  3.  
  4.  
En el archivo CSocketEscuchaP.cpp
Código: Text
  1. BEGIN_MESSAGE_MAP(CSocketEscuchaP, CObject)
  2.     //{{AFX_MSG_MAP(CSocketEscucha)
  3.     //}}AFX_MSG_MAP
  4.     ON_MESSAGE(WM_MYMESSAGE1,OnAccept)
  5. END_MESSAGE_MAP()
  6. ..
  7. ...
  8. CSocketEscuchaP::OnAccept(...){
  9.     MessageBox(0,"OnAccept No Falla","SocketEscuchaP.cpp",0);
  10.     OTRACE("Conexión establecida");
  11.     m_pFrame->Conecta();
  12. }
  13. CSocketEscuchaP::FuncionSocketEscucha(){
  14. CWnd MyCWnd ;
  15. PostMessage(MyCWnd,WM_MYMESSAGE1,0,0); //Esta es el mensaje que se envía
  16. }
  17.  
  18.  

Con todo ello no me funciona, pues nunca se entra a la funcion OnAccept().
¿Alguna idea de que es lo que falla?