有一客户端,创建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);
}
//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);
}
//begin thread
CClientSocket *m_pClientSocket;
m_pClientSocket = new CClientSocket();
if(m_pClientSocket == NULL)
{
return false;
}
m_pDealCtrlThread = AfxBeginThread(DealCtrlCommunication,(LPVOID *)m_pClientSocket);
但是初始化之后发现其成员变量m_hSocket的值为空
BOOL Create(
UINT nSocketPort = 0,
int nSocketType = SOCK_STREAM,
LPCTSTR lpszSocketAddress = NULL
);
然后在连接