多线程调用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;
}
以下是源代码,请各位高手多多指点!
谢谢!#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;
}
小弟只想通过多线程非阻塞的方式调用,Socket,最好能给个实例!谢谢!
==========================================================================cSock 是全局还是局部的???
你在单线程下成功了吗???
MFC全部将Socket变为了非阻塞的模式,所以你用多线程就容易出错!
要用多线程直接用API!