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下如何搞了。
首先把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下如何搞了。
相关文章推荐
- Step by step guide to set up master and slave machines on Windows
- Speeding up Homestead on Windows Using NFS
- Install network printer on Windows 7 Ultimate X64
- 7 Ways To Free Up Hard Disk Space On Windows
- set up SMTP server on Windows 2008[备忘]
- Setting up a local development plattform on windows using xampp
- How to Set Up Chinese Characters on Windows 7
- Setting up a CloudStack dev environment on Windows
- Setting up SSL with a SelfSSL certificate on Windows Server 2003
- 《基于MFC的OpenGL编程》Part 2 Setting up OpenGL on Windows
- Threads(Chapter 3 of Concurrent Programming on Windows)
- J2ME GPS: Network on Wheels -- Java Developers, Start Your Programming Engines!
- Caused by: android.os.NetworkOnMainThreadException
- build opencv by mingw & cmake on windows
- scripts for query proportion of the on-idle wait time is taken up by these wait classes
- capture network traffic on windows ce
- Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
- 在Eclipse中运行Android程序报 Failed to write core dump. Minidumps are not enabled by default on client versions of Windows 解决方法
- How to install python3 and set up a programming on server Ubutung16.04