请教高手,为什么openurl 第三次就弹出无法解析地址的异常

pzichen 2008-08-06 03:27:21
CString temp="username="+username+"&password="+pass;
CString strHttpName=httpname+temp;
CString isfullstr="";
CInternetSession* sess=new CInternetSession();
CHttpFile* fileGet=NULL;
CString strFormData = temp;
CString strHeaders = _T("Content-Type: application/x-www-form-urlencoded"); // 请求头

try
{
fileGet=(CHttpFile*)sess->OpenURL(strHttpName);//打开文件
}
catch(CException* e)
{
fileGet = 0;
throw;
}

CString strSentence, strGetSentence = "";
if(fileGet)
{
DWORD dwStatus;
DWORD dwBuffLen = sizeof(dwStatus);
BOOL bSuccess = fileGet->QueryInfo(HTTP_QUERY_STATUS_CODE|HTTP_QUERY_FLAG_NUMBER, &dwStatus, &dwBuffLen);
if( bSuccess && dwStatus>= 200 &&dwStatus<300 )
{
BOOL result = fileGet->SendRequest(strHeaders, (LPVOID)(LPCTSTR)strFormData, strFormData.GetLength());
while(fileGet->ReadString(strSentence)) // 读取提交数据后的返回结果
{
strGetSentence = strGetSentence + strSentence + char(13) + char(10);
}
//AfxMessageBox(strGetSentence); // 显示返回网页内容
}
else
{
strSentence.Format("POST出错,错误码:%d", dwStatus);
AfxMessageBox(strSentence);
}

fileGet->Close();
delete fileGet;
}
else
AfxMessageBox("不能找到网页文件!");

sess->Close();
return TRUE;

上面这个函数,调用第三次后,就弹出无法解析服务器地址的异常。但是strHttpName,调试看一直是一样的。这是为什么?

...全文
118 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
pzichen 2008-08-06
  • 打赏
  • 举报
回复
测试了一下,发现是OnClose()中的WSACleanup();如果这句话去掉,就没问题。不过为什么第一第二次都没问题,就第三次开始就不行了。另外,我是否可以把WSACleanup()去掉,影响程序稳定吗?在这里面。还请高手赐教
pzichen 2008-08-06
  • 打赏
  • 举报
回复
可能和我建了个SOCK类有关。
BOOL MySocket::IniSock(CString ip, int port)
{
try
{
WSADATA wsda;
Sock_data * sockdata=new Sock_data;

int Client_Addr_Len = sizeof(SOCKADDR);
//初始化Winsock
if (Tcp_Socket!=NULL)
{
OnClose();
}
int i=WSAStartup(MAKEWORD(2,2), &wsda);
//创建一个TCP socket
//printf("Creating socket...");
if((Tcp_Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))== INVALID_SOCKET)
{
//初始化失败。提出警告
WSACleanup();
return FALSE;
}
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(port);
ServerAddr.sin_addr.s_addr = inet_addr(ip);
if (connect(Tcp_Socket, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr))
== SOCKET_ERROR)
{
//提出警告
//printf("connect failed with error %d\n", WSAGetLastError());
closesocket(Tcp_Socket);
WSACleanup();
return FALSE;
}

return TRUE;

}
catch (Exception* e)
{
//MessageError=e->GetMessage();
return FALSE;
}
}

BOOL MySocket::OnClose()
{

try
{
closesocket(Tcp_Socket);
WSACleanup();
Threadout=FALSE;

return true;
}
catch (CException* e)
{
return FALSE;
}

}

在POST那个函数后面,只要加入 MySocket mysock; //公有变量
mysock.Inisock(); 然后马上就mysock.Onclose();运行3次,就出无法解析服务器地址的异常。这是为什么?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧