MFC Socket编程问题 高分

来源:百度知道 编辑:UC知道 时间:2024/06/30 12:58:49
void CTestDlg::OnButton1()
{
// TODO: Add your control notification handler code here
UpdateData(TRUE);
SAFEDEL(m_pNetSocket);

if(m_pNetSocket==NULL)
{
m_pNetSocket = new CNetSocket();
ASSERT(m_pNetSocket!=NULL);
}
if (m_pNetSocket->Create()==0)
{
delete m_pNetSocket;
m_pNetSocket = NULL;
TRACE("Create Socket Error!\n");
return ;
}
while (m_pNetSocket->Connect(_T("1.1.1.1"), 10086)==0)
{
if (AfxMessageBox(_T("连接服务器失败,请检查服务器设置。\n需要重新连接吗?"),MB_YESNO) == IDNO)
{
delete m_pNetSocket;
m_pNetSocket = NULL;
return ;
}
}
CString strAddr;
UINT nPort;
m_pNetSocket->GetPeerName(strAddr, nPort);
// m_pNetSocket->GetPeerName()
GetDlgItem(IDC_STATIC_SERVERIP)->SetWindowText(strAddr);
GetDlgItem(IDC_STATIC_CONNECTSTATUS)->SetWindowText(_T(&

假如1.1.1.1是个无效的服务器IP或10086是个无效的端口号,即连接失败,将进入while内部执行。若连接成功不会执行。
这样正确,不信可以测试一下,可能是CNetSocket出了问题。

CSocket *m_pNetSocket = new CSocket();
ASSERT(m_pNetSocket!=NULL);

if (m_pNetSocket->Create()==0)
{
delete m_pNetSocket;
m_pNetSocket = NULL;
TRACE("Create Socket Error!\n");
return 0;
}
while (m_pNetSocket->Connect(_T("1.1.1.1"), 10086)==0)
{
if (AfxMessageBox(_T("连接服务器失败,请检查服务器设置。\n需要重新连接吗?"),MB_YESNO) == IDNO)
{
delete m_pNetSocket;
m_pNetSocket = NULL;
return 0;
}
}

如果没有错的话 就可以执行到里面去 你可以使用F10单步跟踪 来看看

如果其他地方没问题的话会执行的哈,执行的意思:进去判断一下,分情况哈。