关于SendRequest的问题

winlyf 2008-06-11 08:57:52
在网络传输数据的时候,
主线程:
int uParam = 5000;
int iTimeOut = 5000, iSendTimeOut = 1000, iRecvTimeOut = 7000,
iDataSendTO = 1000, iDataRecvTO = 7000, iRetry = 5;

inetSession.SetOption(INTERNET_OPTION_MAX_CONNS_PER_SERVER,
&uParam,sizeof(int));
inetSession.SetOption(INTERNET_OPTION_MAX_CONNS_PER_1_0_SERVER,
&uParam,sizeof(int));
inetSession.SetOption(INTERNET_OPTION_CONNECT_TIMEOUT,
&iTimeOut, sizeof(int));
inetSession.SetOption(INTERNET_OPTION_SEND_TIMEOUT,
&iSendTimeOut, sizeof(int));
inetSession.SetOption(INTERNET_OPTION_RECEIVE_TIMEOUT,
&iRecvTimeOut, sizeof(int));
inetSession.SetOption(INTERNET_OPTION_DATA_SEND_TIMEOUT,
&iDataSendTO, sizeof(int));
inetSession.SetOption(INTERNET_OPTION_DATA_RECEIVE_TIMEOUT,
&iDataRecvTO, sizeof(int));
inetSession.SetOption(INTERNET_OPTION_CONNECT_RETRIES,
&iRetry, sizeof(int));

CString strWSData(_T(""));
CString strError(_T(""));

INTERNET_PORT port = nPort;

pHttpConn = inetSession.GetHttpConnection(strIP, port);
if (NULL == pHttpConn)
{
......
}

pHttpFile = pHttpConn->OpenRequest(CHttpConnection::HTTP_VERB_POST, (LPCTSTR)strURI);
if (NULL == pHttpFile)
{
if(pHttpConn)
{
pHttpConn->Close();
delete pHttpConn;
pHttpConn = NULL;
}

inetSession.Close();
}

pHttpFile->AddRequestHeaders(_T("Connection: Keep-Alive"));
pHttpFile->AddRequestHeaders(_T("Content-Type:text/xml;charset=gb2312"));
pHttpFile->AddRequestHeaders(_T("Accept-Language:zh-cn"));
AfxMessageBox(L"1");
if(!pHttpFile->SendRequest(NULL, 0, szSoap, strlen(szSoap)))
{
......
}

AfxMessageBox(L"2");
pHttpFile->QueryInfoStatusCode(dwCheck);
AfxMessageBox(L"3");
......
有的时候弹出1后等10多分钟仍然没有弹出2;
有的时候弹出1后过1-2分钟,没有弹出2,但是可以其他操作,
设置超时也没有什么用,这个函数自身有多少BUG,怎么解决?我这里是同步调用
急……………………
...全文
952 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
winlyf 2008-06-20
  • 打赏
  • 举报
回复
又没人了?

没网络的时候程序会退出。
winlyf 2008-06-18
  • 打赏
  • 举报
回复
没人了?
6楼说做出错处理 不知道是用什么方法?
断网后追踪到程序运行到SendRequest处就不动,要么就过段时间退出?
会不会是这个函数里面实现是个for循环还是个什么?断开连接后他通知不到服务器后就一直发请求,最后到内存异常?
winlyf 2008-06-18
  • 打赏
  • 举报
回复
这几天忙乎了。。

现在我是在断开网络的情况下,使用他 发现他就是不会退出有的时候过了一阵子程序都会退出,由于我把程序放在PDA上运行,不能够采取异步。
这种问题怎么解决,通讯时是开启另外的线程运行的。
jameshooo 2008-06-11
  • 打赏
  • 举报
回复
放在单独的线程中处理
winlyf 2008-06-11
  • 打赏
  • 举报
回复
但是如果出现 我现在断开网络,它要么就一直不返回值;要么运行完这个函数,其他的不运行(这样还好);要么就可能导致我整个程序退出
这应该也是和这个相关吧。
jameshooo 2008-06-11
  • 打赏
  • 举报
回复
多数情况下2-3秒那就很正常,偶尔长时间不能说明问题,网络情况本身就是不稳定的,但尽量不要影响用户界面的操作,这也是IE采用异步方式的原因
winlyf 2008-06-11
  • 打赏
  • 举报
回复
现在测试每次大概就是2-3秒,这种问题有时候会出现。
网上介绍说是超时等问题,
还有就是 我尝试在通讯过程中断开连接,发现有时候函数运行到SendRequest后没有往下面运行就结束了
vecri 2008-06-11
  • 打赏
  • 举报
回复
可以使用TRACE 输出每一次传输花了多少时间,
然后再看是哪一次传输有问题
闪破风浪 2008-06-11
  • 打赏
  • 举报
回复
断点追踪,看看具体在哪里~~~
winlyf 2008-06-11
  • 打赏
  • 举报
回复
获取到的szSoap的长度是 424,但是我要发送请求不可能只有一种
winlyf 2008-06-11
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 scq2099yt 的回复:]
需要对SendRequest作出错处理
[/Quote]

该如何处理 我这里只用了一种捕获异常
CATCH(CInternetException, pException)
{
if(pHttpFile)
{
pHttpFile->Close();
delete pHttpFile;
pHttpFile = NULL;
}

if(pHttpConn)
{
pHttpConn->Close();
delete pHttpConn;
pHttpConn = NULL;
}

inetSession.Close();


TCHAR lpszErrorMsg[MAX_PATH+2];
pException->GetErrorMessage(lpszErrorMsg, MAX_PATH);
CString strExp(lpszErrorMsg);

pException->Delete();
}
scq2099yt 2008-06-11
  • 打赏
  • 举报
回复
需要对SendRequest作出错处理
winlyf 2008-06-11
  • 打赏
  • 举报
回复
要等多长时间要看,顺利的话几秒就完成了,就是有时候会出这样的情况,如果出现了第一次,后面都是这样
winlyf 2008-06-11
  • 打赏
  • 举报
回复
szSoap长度有限制么?
jameshooo 2008-06-11
  • 打赏
  • 举报
回复
还有,szSoap的长度是多少?
jameshooo 2008-06-11
  • 打赏
  • 举报
回复
把那些SetOption全注释掉再看看要等多长时间
jiqing_gao 2008-06-11
  • 打赏
  • 举报
回复
赫赫,只用过udp,关注,学习~~~

18,356

社区成员

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

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