本人今天编写了一个客户端,编译、链接时均未发现问题,但在运行后与服务器端建立连接时就会发生异常错误,并且该错误是无法用错误陷阱捕获的,请各位高手帮忙改改,本人将不胜感激!
核心源代码如下:
void CExcuseDlg::OnLink()
{
// TODO: Add your control notification handler code here
BYTE a1,a2,a3,a4;
m_ipadrres.GetAddress(a1,a2,a3,a4);
m_ServerAdr.Format("%d.%d.%d.%d",a1,a2,a3,a4);
m_clientSocket.ShutDown(2);
m_clientSocket.Rest();
//建立计时器,每1秒尝试连接一次,直到连上或TryCount>10
SetTimer(1,500,NULL);
TryCount=0;
}
void CExcuseDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent){
case 1:
if (m_clientSocket.m_hSocket == INVALID_SOCKET)
{
BOOL bFlag;//=m_clientSocket.Create(0,SOCK_STREAM,FD_CONNECT);
if(!bFlag)
{
MessageBox("网络请求失败 !");
m_clientSocket.Close();
KillTimer(1);
KillTimer(2);
return;
}
}
m_clientSocket.Connect(m_ServerAdr,m_port);
TryCount++;
if (TryCount >=10 || m_clientSocket.IsConnect())
{
KillTimer(1);
KillTimer(2);
if (TryCount >=10) AfxMessageBox("Connect Failed!");
return;
}
break;}
核心源代码如下:
void CExcuseDlg::OnLink()
{
// TODO: Add your control notification handler code here
BYTE a1,a2,a3,a4;
m_ipadrres.GetAddress(a1,a2,a3,a4);
m_ServerAdr.Format("%d.%d.%d.%d",a1,a2,a3,a4);
m_clientSocket.ShutDown(2);
m_clientSocket.Rest();
//建立计时器,每1秒尝试连接一次,直到连上或TryCount>10
SetTimer(1,500,NULL);
TryCount=0;
}
void CExcuseDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
switch(nIDEvent){
case 1:
if (m_clientSocket.m_hSocket == INVALID_SOCKET)
{
BOOL bFlag;//=m_clientSocket.Create(0,SOCK_STREAM,FD_CONNECT);
if(!bFlag)
{
MessageBox("网络请求失败 !");
m_clientSocket.Close();
KillTimer(1);
KillTimer(2);
return;
}
}
m_clientSocket.Connect(m_ServerAdr,m_port);
TryCount++;
if (TryCount >=10 || m_clientSocket.IsConnect())
{
KillTimer(1);
KillTimer(2);
if (TryCount >=10) AfxMessageBox("Connect Failed!");
return;
}
break;}
可能是你的socket句柄为空所致,调试状态,然后单步执行找原因
http://blog.csdn.net/wang921718/archive/2007/09/04/1772396.aspx
希望对你有所帮助