在MFC中编写TCP/IP服务器端时,遇到读取访问权限冲突的问题
问题描述:
在MFC中编写TCP/IP服务器端时,遇到读取访问权限冲突的问题
问题相关代码
CSessionSocket类定义
class CSessionSocket : public CSocket
{
DECLARE_DYNAMIC(CSessionSocket);
// Attributes
public:
CTcpServerDlg *m_pDlg;
// Operations
public:
CSessionSocket(CTcpServerDlg *pDlg);
virtual ~CSessionSocket();
// Overrides
public:
virtual void OnReceive(int nErrorCode);
protected:
};
定义pSocket
CSessionSocket *pSocket;
accept函数
void CTcpServerDlg::OnAccept()
{
pSocket=new CSessionSocket(this);
m_pListenSocket->Accept(*pSocket);
}
点击控件时运行代码
void CTcpServerDlg::OnBnClickedButtonSend()
{
// TODO: 在此添加控件通知处理程序代码
//这里省略对sendBuf的定义等操作
pSocket->Send(sendBuf, strlen(sendBuf),0); //程序运行到此处时报错
}
运行结果及报错内容
引发了异常: 读取访问权限冲突。
this->**pSocket** 是 0xCCCCCCCC
求各位看看怎么解决这个问题
答
你到OnAccept的时候才创建pSocket对象,那如果程序先执行OnBnClickedButtonSend,此时pSocket还是个垃圾值,自然会崩溃了。
首先CSessionSocket *pSocket = NULL;进行初始赋空
然后OnBnClickedButtonSend中先判断pSocket不为空再进行操作。
if(pSocket != NULL)
pSocket->Send(sendBuf, strlen(sendBuf),0);
当OnAccept没执行时,说明没有客户端连接,这时候点发送自然什麽也不用做得