SendRequest 操作超时 有关问题,请大侠帮助解决,多谢
SendRequest 操作超时 问题,请大侠帮助解决,谢谢!
在一个多线程程序里面,同时启动2个以上的线程去服务器请求就会出现 操作超时,错误号12002,而这个问题在我自己的开发机器上没有出现,可以支持6个线程,但是部署到服务器上,最多支持2个,第3个线程调用SendRequest,就会出现异常,返回的异常字符串就是 “操作超时”,错误号12002。
HTTPTRANS_API int PostData(char *pszData, int nLength, int id)
{
int nFind = 0;
::WaitForSingleObject(m_hMutex, INFINITE);
map <int, P_HTTPSESSION_MANAGE> ::iterator itetMap = mapSessionMg.find(id);
if (itetMap != mapSessionMg.end())
{
nFind = 1;
}
::ReleaseMutex(m_hMutex);
if (nFind == 0)
return -100;
if (pszData == NULL)
{
return -1;
}
try
{
DWORD dwRet = 0;
char *pszHeader = "Accept: application/vnd.syncml+xml, application/vnd.syncml+wbxml,*\/*\r\nContent-Type: application/vnd.syncml+xml;\r\nAccept-Charset: \ "utf-8\ "\r\n ";
// MessageBox(NULL, "1 ", "1 ",0);
{
char buf[1024] = {0};
sprintf(buf, "id=%d 111111 ", id);
WriteLog(buf);
}
BOOL bRet = itetMap-> second.pFile-> SendRequest(pszHeader, strlen(pszHeader), pszData, nLength);
{
char buf[1024] = {0};
sprintf(buf, "id=%d 2222222 ", id);
WriteLog(buf);
}
if(bRet==FALSE)
{
return -2;
}
{
char buf[1024] = {0};
sprintf(buf, "id=%d 333333 ", id);
WriteLog(buf);
}
int ret = itetMap-> second.pFile-> QueryInfoStatusCode(dwRet);
if (ret == 0)
{
int err = GetLastError();
return -3;
}
{
char buf[1024] = {0};
sprintf(buf, "id=%d 4444444 ", id);
WriteLog(buf);
}
if(dwRet != HTTP_STATUS_OK)
{
return -4;
}
//WriteLog( "开始接收数据:----------------------------------------------- ");
int nReadLen = 1024;
itetMap-> second.len = 0;
{
char buf[1024] = {0};
sprintf(buf, "id=%d 555555 ", id);
WriteLog(buf);
}
memset(itetMap-> second.pData, 0, MAX_SEND_PACK_SIZE);
while (nReadLen == 1024)
{
{
char buf[1024] = {0};
sprintf(buf, "id=%d 666666 ", id);
WriteLog(buf);
}
nReadLen = itetMap-> second.pFile-> Read(&(itetMap-> second.pData[itetMap-> second.len]), 1024);
if( nReadLen > 0)
{
itetMap-> second.len += nReadLen;
}
{
char buf[1024] = {0};
sprintf(buf, "id=%d 777777 second.len=%d nReadLen=%d ", id, itetMap-> second.len, nReadLen);
WriteLog(buf);
}
}
}
catch (CInternetException *pE)
{
char buf[1024] = {0};
在一个多线程程序里面,同时启动2个以上的线程去服务器请求就会出现 操作超时,错误号12002,而这个问题在我自己的开发机器上没有出现,可以支持6个线程,但是部署到服务器上,最多支持2个,第3个线程调用SendRequest,就会出现异常,返回的异常字符串就是 “操作超时”,错误号12002。
HTTPTRANS_API int PostData(char *pszData, int nLength, int id)
{
int nFind = 0;
::WaitForSingleObject(m_hMutex, INFINITE);
map <int, P_HTTPSESSION_MANAGE> ::iterator itetMap = mapSessionMg.find(id);
if (itetMap != mapSessionMg.end())
{
nFind = 1;
}
::ReleaseMutex(m_hMutex);
if (nFind == 0)
return -100;
if (pszData == NULL)
{
return -1;
}
try
{
DWORD dwRet = 0;
char *pszHeader = "Accept: application/vnd.syncml+xml, application/vnd.syncml+wbxml,*\/*\r\nContent-Type: application/vnd.syncml+xml;\r\nAccept-Charset: \ "utf-8\ "\r\n ";
// MessageBox(NULL, "1 ", "1 ",0);
{
char buf[1024] = {0};
sprintf(buf, "id=%d 111111 ", id);
WriteLog(buf);
}
BOOL bRet = itetMap-> second.pFile-> SendRequest(pszHeader, strlen(pszHeader), pszData, nLength);
{
char buf[1024] = {0};
sprintf(buf, "id=%d 2222222 ", id);
WriteLog(buf);
}
if(bRet==FALSE)
{
return -2;
}
{
char buf[1024] = {0};
sprintf(buf, "id=%d 333333 ", id);
WriteLog(buf);
}
int ret = itetMap-> second.pFile-> QueryInfoStatusCode(dwRet);
if (ret == 0)
{
int err = GetLastError();
return -3;
}
{
char buf[1024] = {0};
sprintf(buf, "id=%d 4444444 ", id);
WriteLog(buf);
}
if(dwRet != HTTP_STATUS_OK)
{
return -4;
}
//WriteLog( "开始接收数据:----------------------------------------------- ");
int nReadLen = 1024;
itetMap-> second.len = 0;
{
char buf[1024] = {0};
sprintf(buf, "id=%d 555555 ", id);
WriteLog(buf);
}
memset(itetMap-> second.pData, 0, MAX_SEND_PACK_SIZE);
while (nReadLen == 1024)
{
{
char buf[1024] = {0};
sprintf(buf, "id=%d 666666 ", id);
WriteLog(buf);
}
nReadLen = itetMap-> second.pFile-> Read(&(itetMap-> second.pData[itetMap-> second.len]), 1024);
if( nReadLen > 0)
{
itetMap-> second.len += nReadLen;
}
{
char buf[1024] = {0};
sprintf(buf, "id=%d 777777 second.len=%d nReadLen=%d ", id, itetMap-> second.len, nReadLen);
WriteLog(buf);
}
}
}
catch (CInternetException *pE)
{
char buf[1024] = {0};