WM5程序中如何自动连接GPRS

alpha064 2008-09-15 01:18:00
我利用VB.NET开发WM5系统上的软件,需要利用Socket连接远端服务器。
但目前遇到一个问题,就是我在连接前必须手动连接一下系统中的GPRS,能否实现程序自动触发拨号GPRS呢?
...全文
323 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zxjl0214 2008-09-19
  • 打赏
  • 举报
回复
如果你装了WM6.0 SDK的话,看一下以下的例子就行了
\Windows Mobile 6 SDK\Samples\PocketPC\CPP\MFC\CMHELPER
柚子1978 2008-09-18
  • 打赏
  • 举报
回复
bool CEvcSendPICDlg::EstablishGPRSConnection()
{
HANDLE phWebConnection=NULL;

// Here comes the main code:
// First we check if we might have a connection
DWORD pdwStatus = 0;

ConnMgrConnectionStatus(phWebConnection, &pdwStatus);

if (pdwStatus == CONNMGR_STATUS_CONNECTED) {


return TRUE;
}
else {

//We are not connected, so lets try:
//The CONNECTIONINFO is the structure that
//tells Connection Manager how we want
//to connect

CONNMGR_CONNECTIONINFO sConInfo;
memset(&sConInfo,0, sizeof(CONNMGR_CONNECTIONINFO));
sConInfo.cbSize = sizeof(CONNMGR_CONNECTIONINFO);
// We want to use the "guidDestNet" parameter
sConInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
// This is the highest data priority.
sConInfo.dwPriority = CONNMGR_PRIORITY_USERINTERACTIVE;
sConInfo.dwFlags=0;
// Lets be nice and share the connection with
// other applications
sConInfo.bExclusive=FALSE;
sConInfo.bDisabled=FALSE;
sConInfo.guidDestNet=IID_DestNetInternet;


if (ConnMgrEstablishConnection(&sConInfo,&phWebConnection) == S_OK)
{

for (unsigned int k = 0; k < 6; k++) {
ConnMgrConnectionStatus(phWebConnection,&pdwStatus);

if (pdwStatus == CONNMGR_STATUS_CONNECTED)
return TRUE;
else {
if (pdwStatus == CONNMGR_STATUS_CONNECTIONCANCELED || pdwStatus == CONNMGR_STATUS_WAITINGCONNECTIONABORT)
return FALSE;
Sleep(2000);

ConnMgrConnectionStatus(phWebConnection,&pdwStatus);
if (pdwStatus == CONNMGR_STATUS_WAITINGCONNECTION) {

}

if (pdwStatus == CONNMGR_STATUS_CONNECTIONCANCELED || pdwStatus == CONNMGR_STATUS_WAITINGCONNECTIONABORT)
return FALSE;
}
}
return FALSE;
}
else {
//! Connection failed!
return FALSE;

}


}

}
guguqiaqia 2008-09-16
  • 打赏
  • 举报
回复
把你的启动gprs的功能,写在你的程序的初始化函数来里面不就可以了。
frankgogoland 2008-09-16
  • 打赏
  • 举报
回复

下面代码我一直再用,试试把

CONNMGR_CONNECTIONINFO ConnInfo;
memset( &ConnInfo, 0, sizeof(ConnInfo));
ConnInfo.cbSize = sizeof(ConnInfo);
ConnInfo.dwParams = CONNMGR_PARAM_GUIDDESTNET;
ConnInfo.dwPriority = CONNMGR_PRIORITY_HIPRIBKGND;
// ConnInfo.dwFlags=CONNMGR_FLAG_PROXY_WAP|CONNMGR_FLAG_PROXY_HTTP|CONNMGR_FLAG_PROXY_SOCKS4|CONNMGR_FLAG_PROXY_SOCKS5;
if(conntype == CONN_WAP)
ConnInfo.dwFlags=CONNMGR_FLAG_PROXY_WAP|CONNMGR_FLAG_PROXY_HTTP|CONNMGR_FLAG_PROXY_SOCKS4|CONNMGR_FLAG_PROXY_SOCKS5;
else
{
ConnInfo.dwFlags=0;
}
#ifdef POCKETPC
ConnInfo.guidDestNet = conntype==CONN_INTERNET?IID_DestNetInternet:IID_DestNetCorp;
#else
ConnInfo.guidDestNet = conntype==CONN_INTERNET?IID_DestNetInternet:IID_DestNetWAP;
#endif
//ConnInfo.hWnd = m_hEventWnd;
//ConnInfo.uMsg = m_nWM_CMEVENT; // lpConnection->WM_CMEVENT;
DWORD dwStatus;
hResult = ConnMgrEstablishConnectionSync(&ConnInfo, &m_hConnection,30000, &dwStatus);
yyunffu 2008-09-16
  • 打赏
  • 举报
回复
通过平台调用方式用,调用连接管理器系列函数。

ConnMgrEstablishConnectionSync等系列函数,google一下。
vagrantisme 2008-09-16
  • 打赏
  • 举报
回复
接入点的创建过程:
CString sXml;
sXml.Format(
_T("<wap-provisioningdoc>")
_T("<characteristic type=\"CM_GPRSEntries\">")
_T("<characteristic type=\"%s\">")
_T("<parm name=\"DestId\" value=\"{436EF144-B4FB-4863-A041-8F905A62C572}\" />")
_T("<parm name=\"UserName\" value=\"%s\" />")
_T("<parm name=\"Password\" value=\"%s\" />")
_T("<parm name=\"DnsAddr\" value=\"\" />")
_T("<parm name=\"AltDnsAddr\" value=\"\" />")
_T("<parm name=\"IpAddr\" value=\"\" />")
_T("<parm name=\"AlwaysOn\" value=\"0\" />")
_T("<characteristic type=\"DevSpecificCellular\">")
_T("<parm name=\"GPRSInfoAccessPointName\" value=\"%s\" />")
_T("</characteristic>")
_T("</characteristic>")
_T("</characteristic>")
_T("</wap-provisioningdoc>")
,
m_sName,
m_sUser,
m_sPswd,
m_sAccessPoint
);

WCHAR wszOutput[1024] = {0};
HRESULT hResult = DMProcessConfigXML(sXml, CFGFLAG_PROCESS, (LPWSTR*)&wszOutput);

return hResult == S_OK;

建立Socket过程:
SOCKET skt = INVALID_SOCKET;
struct sockaddr_in sockaddr = {0};

unsigned long iadd = INADDR_NONE;
struct hostent *host = 0;

skt = socket(AF_INET, SOCK_STREAM, 0);
if( skt==INVALID_SOCKET )
return INVALID_SOCKET;
if( setNormalsockopt(skt) ){
tear_down(skt);
return INVALID_SOCKET;
}

sockaddr.sin_family = AF_INET;
char* hostname = T2A(pNew->m_sIp);
iadd = inet_addr(hostname);
if(INADDR_NONE != (int)iadd){
memcpy(&sockaddr.sin_addr, &iadd, sizeof(iadd));
}else{
host = gethostbyname(hostname);
if(!host){
tear_down(skt);
return INVALID_SOCKET;
}
memcpy(&sockaddr.sin_addr, host->h_addr, host->h_length);
}
sockaddr.sin_port = htons((short)pNew->m_nPort);

u_long ul = 1; // set nonblocking call
if( ioctlsocket( skt, FIONBIO, &ul ) ){
tear_down(skt);
return INVALID_SOCKET;
}
ul = 0; // set blocking call before return;

int nConnRt = connect(skt, (struct sockaddr*)&sockaddr, sizeof(sockaddr));

if( 0 != nConnRt){
if( ioctlsocket( skt, FIONBIO, &ul ) ){
tear_down(skt);
return INVALID_SOCKET;
}
return skt;
}

struct timeval timeout = {0};
fd_set fd = {0};
timeout.tv_sec = 1;
timeout.tv_usec = 0;
for (;;){
if( IsExitSet() ){
ioctlsocket( skt, FIONBIO, &ul );
tear_down(skt);
return INVALID_SOCKET;
}
FD_ZERO(&fd);
FD_SET(skt, &fd);
int nRet = select(skt + 1, NULL, &fd, NULL, &timeout);
if( nRet > 0 )
break;
if( nRet == SOCKET_ERROR ){
ioctlsocket( skt, FIONBIO, &ul );
tear_down(skt);
return INVALID_SOCKET;
}
}

if( ioctlsocket( skt, FIONBIO, &ul ) ){
tear_down(skt);
return INVALID_SOCKET;
}
return skt;
北方大冬瓜 2008-09-16
  • 打赏
  • 举报
回复
可以,使用 ConnMgr 系列函数,查查 MSDN 吧
dang800919 2008-09-16
  • 打赏
  • 举报
回复
同上 你初始化你的线路设备了么?

7,655

社区成员

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

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