本人由于工作关系,用到SOCKET通信,大致实现如下:
   CXXDialog::CXXDialog()
  {
       ...  //读取配置文件;
       m_pSerialLog = new CSerialLogServerSocket();
       result = m_pSerialLog ->Create(5555, SOCK_DGRAM); //建立SOCKET.
    
       if (0 == result)
      {
          AfxMessageBox("Serial Log Create Socket Failed!");
           Close(true);
       }
       m_pSerialLog->Listen(); 
       ...    
   }   CXXDialog::~CXXDialog()
   {
       if (NULL != m_pSerialLog) 
       {
           delete m_pSerialLog;
           m_pSerialLog = NULL;
       }
   }   CXXDialog::SetPrintMode()
   {
       .....  //
       if(NULL == m_pSeriaLog)
       {
            m_pSerialLog = new CSerialLogServerSocket();
            BOOL result = m_pSerialLog->Create(5555, SOCK_DGRAM);//建立SOCKET          
            if (0 == result)
            {
                bRet = FALSE;
                cFlag = "OFF";
                AfxMessageBox("Serial Log Create Socket Failed!");
                Close(true);
            }
            else
            {
                cFlag = "ON";
                m_pSerialLog->Listen(); 
            }      
        }
        ... //
   }
实现思路如下:程序开启SOCKET通信有两种方式:一是程序启动时,读取配置文件控制SOCKET开关.二是通过程序设置开启/关闭SOCKET.CSerialLogServerSocket是CAsyncSocket的派生类.现在的问题是,程序编译无问题,通过程序初始化创建的SOCKET通信没任何问题.但是通过程序设置而创建的SOCKET能正确建立成功,但是监听失败,并在析构的时,也就是调用了
m_pSerialLog->Close()时程序调出错误对话框.  请问,两部分建立SOCKET实现代码几乎一样.为什么一个成功,一个失败.难道SOCKET不能动态创建.这问题困扰我好久了,请路过的大侠帮忙看看.谢谢!.

解决方案 »

  1.   

    未与端口绑定,你可以在出错的地方(Listen)调用WSAGetLastError(),得到错误代码,再去查相关的资料
      

  2.   

    SOCK_DGRAM???怎么又在Listen呢?SOCK_DGRAM=>SOCK_STREAM?
      

  3.   

    未与端口绑定,你可以在出错的地方(Listen)调用WSAGetLastError(),得到错误代码,再去查相关的资料
    ----------------------------------
    得到错误代码,怎样去查错误代码的具体函意.m_pSerialLog好像没有关闭啊。
    -----------------------------------------
    在delete m_pSerialLog时会自动调用m_pSerialLog->Close();弹出错误对话框就是在执行这一步出现的. ---- ASSERT(CAsyncSocket::LookupHandle(hSocket, FALSE) != NULL);断言错误.
    SOCK_DGRAM???怎么又在Listen呢?SOCK_DGRAM=>SOCK_STREAM?
    ------------------------------------
    ????? SOCK_DGRAM 不能用Listen么?直接就可能Receive么?