您的位置:首页 > 其它

Establish dial-up network by programming on Windows

2009-02-17 06:28 323 查看
在程序中如何通过modem建立拨号网络?这个问题困扰了我好久,但最近工作需要,只好花时间仔细学习了一把。

首先把Modem的driver安装好之后,使用Hyper Terminal工具测试了一下,使用AT命令可以和我的手机互相打通电话。
然后使用Windows的"New Connection Wizard"新建一个网络连接,Google了老半天,终于找到了一个可以用的ISP,263的,电话号码是95963,用户名和密码都是263。这样使用Windows的工具建立拨号网络,成功的连上了ISP的server,可以使用Browser浏览web page了。
然后拨号网络怎么办呢?原来,需要调用Windows的RAS(Remote Access Service) API,有一些相应的函数可用,但有一个入口参数是,使用Windows的拨号工具建立的拨号网络连接,这个是 RasDial 函数中需要的 EntryName。我不想这样做,又google了老半天,有一个牛人提供了这样一种方法,在自己的程序中,调用 RasDial 之前,建立一个拨号网络连接,然后调用 RasDial,在拨号网络断开之后,再把这个拨号网络连接删除。我想了想,还是放弃了这种方法。

好了,下面贴出我的 Sample Code:

这个是回调函数,在调用RasDial建立拨号连接的过程中,Windows会不停的调用这个函数来报告当前拨号网络的状态和错误信息,非常有用,细节请参考MSDN
void WINAPI RasDialFuncCallback(UINT, RASCONNSTATE state, DWORD err)
{
printf("RasDialFunc, connection state:[%d], error code:[%d]/n", state, err);
}

bool dialUpISP()
{
RASDIALPARAMSA dialParams;

memset(&dialParams, 0, sizeof(dialParams));
dialParams.dwSize = sizeof(dialParams);

//这个变量保存的是这个拨号网络的Handle,以后对这个连接操作都需要这个handle
HRASCONN hRasConnectionHandle = NULL;

//这个 c95963 就是使用Windows的"New Connection Wizard"建立的拨号网络连接的名字,自己随便起的,
strcpy_s(dialParams.szEntryName, "c95963");

strcpy_s(dialParams.szPhoneNumber, "95963");
strcpy_s(dialParams.szUserName, "263");
strcpy_s(dialParams.szPassword, "263");

RasDialA(NULL, NULL, &dialParams, 0, RasDialFuncCallback, &hRasConnectionHandle);

return true;
}

好了,Windows下的搞定了,下面需要学习Linux下如何搞了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: