有一客户端,创建1个CSocket的子类,在全局函数中进行初始化和连接,但是却连接失败,使用SOCKET则能正常通信。或者用CSocket::Atach()函数将该SOCKET关联上后也可以正常通讯,请问这是什么原因?代码如下:
//socket 连接
SOCKET s ;
s = socket(AF_INET,SOCK_STREAM,0); SOCKADDR_IN m_addr;
m_addr.sin_family = AF_INET;
m_addr.sin_addr.S_un.S_addr = inet_addr("192.168.0.1");
m_addr.sin_port = htons(8408);
int nret = -1;
connect(s,(LPSOCKADDR)&m_addr,sizeof(m_addr));//CSocket连接   //这里出问题,不能连接
CClientSocket *pSocket = 0;
pSocket  = (CClientSocket*)pParam;//pParam是通过线程参数传递过来的CClientSocket指针,没有问题。
BOOL nRet = pSocket->Connect((LPSOCKADDR)&m_addr, sizeof(m_addr));
while(!nRet )
{
nRet = pSocket->Connect((LPSOCKADDR)&m_addr, sizeof(m_addr));
Sleep(1000);
}//CSocket::Atach()连接  //Atach()之后,可以正常通讯
SOCKET s ;
s = socket(AF_INET,SOCK_STREAM,0);
CClientSocket *pSocket = 0;
pSocket  = (CClientSocket*)pParam;
pSocket->Attach(s);
BOOL nRet = pSocket->Connect((LPSOCKADDR)&m_addr, sizeof(m_addr));

while(!nRet )
{
nRet = pSocket->Connect((LPSOCKADDR)&m_addr, sizeof(m_addr));
Sleep(1000);
}

解决方案 »

  1.   

    CSocket对象的创建是在程序初始化的时候
    //begin thread
    CClientSocket *m_pClientSocket;
    m_pClientSocket = new CClientSocket();
    if(m_pClientSocket == NULL)
    {
    return false;
    }
    m_pDealCtrlThread = AfxBeginThread(DealCtrlCommunication,(LPVOID *)m_pClientSocket);
               但是初始化之后发现其成员变量m_hSocket的值为空
      

  2.   

    你应该先调用
    BOOL Create(
       UINT nSocketPort = 0,
       int nSocketType = SOCK_STREAM,
       LPCTSTR lpszSocketAddress = NULL 
    );
    然后在连接
      

  3.   

    是啊,你的CClientSocket对象还没有Create呢,楼主疏忽了呵呵^_^