window mobile wap联网通讯的问题

youngplayee 2009-07-15 04:32:17
为了支持该死的中移动的CMWAP,现在要在WM上搞HTTP的连接。
如下,我从网上找了段代码,是用INET接口的。但是InternetReadFileEx 的时候服务器没有响应。因为原本服务器就不是什么网页的东东。

请问,还有别的接口可以得到服务器的RESPONSE吗? 就如同KJAVA里OPENINUTSTREAM之类的。打开一个输入流,把服务器的数据读出来就好了。

BOOL CVHttpConnection::SendDataToServer(
CString strServer,
DWORD dwPort,
// CString strObj,
// CString strHead,
LPVOID lpData,
DWORD dwDataLen//,
// LPBYTE &lpRecvBuffer,
// DWORD &dwRecvDataLen,
// CString &strRetHeadInfo
)
{
CString strObj = _T(""); // victor added
CString strHead = //_T("Accept: */*\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.00; Windows 98)\r\n");
_T("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*");
// victor added
USES_CONVERSION;
BOOL bError=TRUE;
HINTERNET hOpen =NULL;
HINTERNET hConnect =NULL;
HINTERNET hReq =NULL;
DWORD dwAccType =LOCAL_INTERNET_ACCESS;
TCHAR szAccept[] = _T("*/*");
LPSTR AcceptTypes[2]={0};
DWORD dwCode =0;
CHAR *lpBuffer, szData[1024];
// DWORD dwBufferSize =DATA_BLOCK;
DWORD dwSize=0;
DWORD dwFlags = INTERNET_FLAG_RELOAD |
INTERNET_FLAG_NO_CACHE_WRITE |
INTERNET_FLAG_KEEP_CONNECTION;
BOOL m_bUseProxy= false; //theSysConfig.bIsUseProxyHttp;
BOOL m_bAuth = false; //theSysConfig.bIsUseHttpAuth;
CString m_strProxyServer;
CString m_strProxyUser =_T(""); //theSysConfig.chHttpProxyUser;
CString m_strProxyPWD = _T(""); //theSysConfig.chHttpProxyUser;

//m_strProxyServer.Format(_T("http://%s:%ld"),theSysConfig.chHttpProxyName,theSysConfig.dwHttpProxyPort);

DWORD dwRecvDataLen =0;

//open....
if(m_bUseProxy)
{
if ( !(hOpen = InternetOpen ( _T("colorme"),
CERN_PROXY_INTERNET_ACCESS, m_strProxyServer, NULL, 0) ) )
{
/*ErrorOut ( GetLastError(), _T("InternetOpen"));
LogTrace(_T("InternetOpen Errcode=%ld"),GetLastError());*/
return 0;
}
}
else
{
if ( !(hOpen = InternetOpen (_T("colorme"),
LOCAL_INTERNET_ACCESS , NULL, 0, 0) ) )
{
/*ErrorOut ( GetLastError(), _T("InternetOpen"));
LogTrace(_T("InternetOpen Errcode=%ld"),GetLastError());*/
return 0;
}
}

//connect...
if ( !(hConnect = InternetConnect ( hOpen, strServer ,
dwPort, _T(""), _T(""), INTERNET_SERVICE_HTTP, dwPort , 0) ) )
{
/*ErrorOut (GetLastError(), _T("InternetConnect"));
LogTrace(_T("InternetConnect Errcode=%ld"),GetLastError());*/
return 0;
}
if ( !(hReq = HttpOpenRequest (hConnect, _T("POST"), strObj,
HTTP_VERSION, _T(""),
(LPCTSTR*) AcceptTypes,
dwFlags ,0 )))
{
/*ErrorOut (GetLastError(), _T("HttpOpenRequest"));
LogTrace(_T("HttpOpenRequest Errcode=%ld"),GetLastError());*/
return 0;
}
if ( !HttpAddRequestHeaders (hReq, strHead, strHead.GetLength(), HTTP_ADDREQ_FLAG_ADD))
{
/*ErrorOut (GetLastError(), _T("HttpSendRequest"));
LogTrace(_T("HttpAddRequestHeaders Errcode=%ld"),GetLastError());*/
bError=TRUE;
goto RET;
}
again:

do {
::InternetSetStatusCallback(hReq,&CVHttpConnection::ReceiveData);
if ( !HttpSendRequest (hReq, NULL, 0, lpData, dwDataLen))
{
/*ErrorOut (GetLastError(), _T("HttpSendRequest"));
LogTrace(_T("HttpSendRequest Errcode=%ld"),GetLastError());*/
break;
}

dwSize = sizeof (DWORD) ;
if ( !HttpQueryInfo (hReq, HTTP_QUERY_STATUS_CODE |
HTTP_QUERY_FLAG_NUMBER, &dwCode, &dwSize, NULL))
{
/*ErrorOut (GetLastError(), _T("HttpQueryInfo"));
LogTrace(_T("HttpQueryInfo Errcode=%ld"),GetLastError());*/
break;
}
bError=FALSE;
} while(FALSE);
//出错则处理错误.
if(bError)
{
goto RET;
}
bError=TRUE;
do {
if ( dwCode == HTTP_STATUS_DENIED || dwCode ==
HTTP_STATUS_PROXY_AUTH_REQ)
{
do
{
InternetReadFile (hReq, (LPVOID)szData, 1000, &dwSize);
}
while (dwSize != 0);

//if (m_bAuth) //是否认证
//{
// if(!SetProxyUserPWD(hConnect,(LPCTSTR)m_strProxyUser,(LPCTSTR)m_strProxyPWD))
// {
// /*LogTrace(_T("SetProxyUserPWD Errcode=%ld"),GetLastError());*/
// break;
// }
// goto again;
//}
//else
{
if ( InternetErrorDlg (GetDesktopWindow(),
hReq,
ERROR_INTERNET_INCORRECT_PASSWORD,
FLAGS_ERROR_UI_FILTER_FOR_ERRORS |
FLAGS_ERROR_UI_FLAGS_GENERATE_DATA |
FLAGS_ERROR_UI_FLAGS_CHANGE_OPTIONS,
NULL) == ERROR_INTERNET_FORCE_RETRY)
goto again;
}

}
else
{
if(dwCode!=200)
{
break;
}
}
// First time we will find out the size of the headers.
if(!HttpQueryInfo (hReq,HTTP_QUERY_RAW_HEADERS_CRLF, NULL, &dwSize, NULL))
{
// break;
}
lpBuffer = new char [dwSize + 1 ];

// Now we call HttpQueryInfo again to get the headers.
if (!HttpQueryInfo (hReq,HTTP_QUERY_RAW_HEADERS_CRLF, (LPVOID)
lpBuffer,
&dwSize, NULL))
{
/*ErrorOut (GetLastError(), _T("HttpQueryInfo"));
LogTrace(_T("HttpQueryInfo Errcode=%ld"),GetLastError());*/
delete [] lpBuffer;
break;
}
//strRetHeadInfo=(TCHAR*)lpBuffer;
strRetHeadInfo.Format(_T("%s"),lpBuffer);
delete [] lpBuffer;
//读取RESPONSE.
BYTE *lpRecvBuffer = new BYTE[MAX_BUFFER_SIZE];
//BOOL result = InternetQueryDataAvailable(hReq,&dwRecvDataLen,0,0);


//InternetGetLastResponseInfo(&dwCode,(LPWSTR)lpRecvBuffer,&dwRecvDataLen);
InternetReadFileEx (hReq, (LPINTERNET_BUFFERS)lpRecvBuffer, MAX_BUFFER_SIZE, (DWORD_PTR)&dwRecvDataLen);
//if(!ReadResponse(hReq,lpRecvBuffer,dwRecvDataLen))
//{
// /*LogTrace(_T("ReadResponse Errcode=%ld"),GetLastError());*/
// break;
//}
//delete lpRecvBuffer;
bError=FALSE;
} while(FALSE);

//处理清除工作
RET:
if (hReq)
{
InternetCloseHandle(hReq);
hReq = NULL;
}
if (hConnect)
{
InternetCloseHandle(hConnect);
hConnect = NULL;
}
if (hOpen)
{
InternetCloseHandle(hOpen);
hOpen = NULL;
}
/*SECURITY_CLOSE(hReq);
SECURITY_CLOSE(hConnect);
SECURITY_CLOSE(hOpen);*/
return !bError;

}
...全文
101 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
youngplayee 2009-07-21
  • 打赏
  • 举报
回复
我通过在SOCKET连接中加入HTTP包头,解决了这个问题,谢谢各位!
youngplayee 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wyymaomi 的回复:]
做个HTTP代理接口来读取webservice不就好了
[/Quote]

可否详细点。。。
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wyymaomi 的回复:]
做个HTTP代理接口来读取webservice不就好了
[/Quote]
值得尝试一下
wyymaomi 2009-07-15
  • 打赏
  • 举报
回复
做个HTTP代理接口来读取webservice不就好了
youngplayee 2009-07-15
  • 打赏
  • 举报
回复
我请求的不是网页,而是我们公司的WEBSERVICE。 我们已经完成了SOCKET的连接,现在要实现HTTP的连接。

归根到底,我是要寻求一种HTTP的通道与服务器进行通信。因为CMWAP只支持HTTP协议,而不支持SOCKET协议啊!
88csdn 2009-07-15
  • 打赏
  • 举报
回复
每次激活cmwap之后的第一个请求总是会推给用户一个页面,再次请求就可以正常InternetReadFileEx了
或者你先用IE浏览一下网页,当然要走cmwap哦~~~
儿大不由爷 2009-07-15
  • 打赏
  • 举报
回复
确认你的链接是用的CMWAP么?

7,657

社区成员

发帖
与我相关
我的任务
社区描述
Windows Phone是微软发布的一款手机操作系统,它将微软旗下的Xbox LIVE游戏、Zune音乐与独特的视频体验整合至手机中。
社区管理员
  • Windows客户端开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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