突发奇想--网络连接方面的控制,欢迎讨论指教!
突发奇想,想写一个程序控制windows网络连接拨号!
现在我们使用ADSL的时候,只要一登陆就开始计时。而且在计时的过程中,不管我们在浏览网页还是在做什么别的与上网无关的事情,电信公司都在一刻不停的给我们计费,因为我们的网络是连通的只要我们没有手动的把网络断开。我想开发一个程序,在有网络请求的时候自动打开网络连接、拨号...,在网络空闲的时候自动关闭网络连接以节省网络使用时间。这个过程网络的请求速度肯定会受到影响,但是上网时间回大为减少。
典型案例:
上论坛的时候,读贴子的时候系统自动关闭连接,当我们点击下一页的时候,系统自动拨号连通网络,浏览器转入下一页,然后系统再次自动关闭连接节省网络资源!
希望有兴趣的朋友,谈谈你的看法。
初步打算使用C#开发该程序。(因为本人是JAVA程序员,但考虑到Java单机程序运行速度的影响和对windowsAPI的调用,故使用语法与java相近的C#)
另外也希望有经验的朋友能够提供一些这方面的资料,比如windows网络拨号函数,如何判断控制网络请求等。
初步设想,如果能开发出来,定拿出来与贡献者共享!请大家多多赐教,谢谢!
问题点数:100、回复次数:13Top
1 楼somedummy(某人马甲)回复于 2005-02-02 20:38:07 得分 15
不知道你怎么判断网络是否在被使用?如果通过判断socket状态来检测的话,那么这个软件基本上可以说没有意义了。因为很多服务在没有流量的时候,socket仍然处于established,这样的话,就达不到你的目的了(最糟糕的是现在某些http应用也变成这样了,譬如Server Push);而不这样判断就强行掐断网络连接的话,可能造成数据传输的中断。
拨号的API在Windows里面就有,不过我看到的还是非托管的代码,不知道C#怎么搞(混合非托管和托管可以,但是麻烦)。在RSA里面有个
DWORD RasDial(
LPRASDIALEXTENSIONS lpRasDialExtensions,
LPCTSTR lpszPhonebook,
LPRASDIALPARAMS lpRasDialParams,
DWORD dwNotifierType,
LPVOID lpvNotifier,
LPHRASCONN lphRasConn
);
通过这个函数就可以进行拨号,在msdn.microsoft.com有这个函数的详细解释Top
2 楼somedummy(某人马甲)回复于 2005-02-02 20:40:36 得分 5
ft了,怎么钻到这个胡同里面来了,真远啊Top
3 楼Mackz(在相互)回复于 2005-02-02 22:41:19 得分 5
不是有包月吗?Top
4 楼friendyou(anew)回复于 2005-02-03 10:47:02 得分 0
to somedummy(某人马甲) :你说得对,现在拨号的问题基本可以解决,问题的难点在于如何去判断系统是否存在网络请求。
希望大家踊跃发言,提出您的看法,谢谢!Top
5 楼qzj(SoldierQ)回复于 2005-02-03 11:07:17 得分 15
Windows的撥號程序有空閒時自動斷開和總是自動撥號的選項的,所以就算你開發出來這樣的程序也不會有市場和較大的實用性,不過作爲學習之用倒不錯,蠻有難度的課題,呵呵。
另外,買個ADSL路由器就能實現你要的功能,而且不會讓你感覺到撥號的過程,呵呵。Top
6 楼Pinbor(来客心动)回复于 2005-02-03 13:55:53 得分 10
这个创意不错,好好实现是个关键Top
7 楼haoco()回复于 2005-02-03 15:05:14 得分 5
upTop
8 楼yizhixiaozhu(天啦,手都起茧了)回复于 2005-02-05 20:19:42 得分 5
哈哈
顶Top
9 楼hedonister(冰戈)回复于 2005-02-15 00:05:00 得分 5
upTop
10 楼flashboy(爱写程序的小绵羊)回复于 2005-02-16 13:16:19 得分 15
这个想法是好的,但是不太可能实现,涉及的东西太多了,我举个例子:
某个使用TCP协议的CLIENT程序连接到公网上某台服务器,连上去后,等待服务器发回数据,此时处于阻塞状态,假设当前没有其他网络应用程序,也无流量,所以你的程序此时断开网络。。。。 你想想开,你的CLIENT程序此时会不会报错,因为此时TCP连接断开,RECV肯定会返回错误。 所以你的想法我想只适合那种短连接程序,比如WEB浏览,对于长连接的程序是不好搞的。Top
11 楼friendyou(anew)回复于 2005-02-18 09:14:46 得分 0
我的初衷是想开发出来旨在网页浏览的时候使用,如果能实现这一功能就可以说达到了我的初衷的
大家说得很有道理,请继续!
Top
12 楼somedummy(某人马甲)回复于 2005-02-18 14:51:45 得分 10
回复人: flashboy(爱写程序的小绵羊) ( ) 信誉:100 2005-02-16 13:16:00 得分: 0
这个想法是好的,但是不太可能实现,涉及的东西太多了,我举个例子:
某个使用TCP协议的CLIENT程序连接到公网上某台服务器,连上去后,等待服务器发回数据,此时处于阻塞状态,假设当前没有其他网络应用程序,也无流量,所以你的程序此时断开网络。。。。 你想想开,你的CLIENT程序此时会不会报错,因为此时TCP连接断开,RECV肯定会返回错误。 所以你的想法我想只适合那种短连接程序,比如WEB浏览,对于长连接的程序是不好搞的。
=========================================================
这个说法站不住脚,因为这种连接程序可以检测所有的socket的状态,这样的话完全可以避免你说的这种情况,udp的还差不多Top
13 楼lovelxj(伊斯人,吾谁与归)回复于 2005-02-27 15:59:39 得分 10
呵呵 这个用来学习是可以
但是估计是没有实用的
假设这个软件的功能已经实现了预期的效果
然后此时我正在一个论坛上面,ADSL已经断开,突然我要看一个页面,这个时候ADSL要重新连接,这个时间就需要不短的时间。
估计没有人愿意为了省电钱而多花时间去看沙漏吧。Top




