多线程调用ABC::connect()失败!
以下是源代码,请各位高手多多指点!
谢谢!#include "stdafx.h"
#include "ABC.h"
#include "ClientSocket.h"#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif/////////////////////////////////////////////////////////////////////////////
// CClientSocketCClientSocket::CClientSocket()
{
}CClientSocket::~CClientSocket()
{
}
// Do not edit the following lines, which are needed by ClassWizard.
#if 0
BEGIN_MESSAGE_MAP(CClientSocket, CAsyncSocket)
//{{AFX_MSG_MAP(CClientSocket)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
#endif // 0/////////////////////////////////////////////////////////////////////////////
// CClientSocket member functions
void CClientSocket::OnClose(int nErrorCode) 
{
CAsyncSocket::OnClose(nErrorCode);
}
void CClientSocket::OnConnect(int nErrorCode) 
{
CAsyncSocket::OnConnect(nErrorCode);
}void CClientSocket::OnOutOfBandData(int nErrorCode) 
{
ASSERT(FALSE); //Telnet should not have OOB data
CAsyncSocket::OnOutOfBandData(nErrorCode);
}void CClientSocket::OnReceive(int nErrorCode) 
{
clsA->ProcessMessage(this);
unsigned char m_bBuf[512];
int nBytes = Receive(m_bBuf ,512 );
}void CClientSocket::OnSend(int nErrorCode) 
{
CAsyncSocket::OnSend(nErrorCode);
}
BOOL CABC::Connect()
{
BOOL bOK;
//创建socke
cSock = new CClientSocket(); //第二个线程运行到此行都出错
if(cSock != NULL)
{
bOK = cSock->Create(0,SOCK_STREAM,FD_READ | FD_WRITE | FD_CLOSE | FD_CONNECT | FD_OOB);
if(bOK == TRUE)
{
cSock->AsyncSelect(FD_READ | FD_WRITE | FD_CLOSE | FD_CONNECT | FD_OOB);
//连接服务器
cSock->Connect("192.168.1.10", 23);//23
//cSock->OnReceive(1);
}
else
{
delete cSock;
cSock = NULL;
error = "telnet 连接失败!";
}
}
else
{
error = "内存申请失败!";
}
return bOK;
}

解决方案 »

  1.   

    提示内存错误!
    小弟只想通过多线程非阻塞的方式调用,Socket,最好能给个实例!谢谢!
      

  2.   

    cSock = new CClientSocket(); ===============================================================    那你在new以前,上次的资源释放掉了吗?
      

  3.   

    cSock = new CClientSocket(); 
    ==========================================================================cSock 是全局还是局部的???
    你在单线程下成功了吗???
      

  4.   

    最好不要用MFC实现多线程,要用多线程一般是阻塞的方式,
    MFC全部将Socket变为了非阻塞的模式,所以你用多线程就容易出错!  
    要用多线程直接用API!
      

  5.   

    建议不要用Socket类,虽然它用起来很方便,但同时也失去了灵活性,对其控制显得困难,而且会出现莫名其妙的错误。在多线程中建议还是使用Api函数吧