Establish dial-up network by programming on Windows

来源:互联网 发布:php内置函数100个 编辑:程序博客网 时间:2024/06/03 19:36

 

在程序中如何通过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下如何搞了。

原创粉丝点击