1.10个增强微软Office功能的精品插件
2.点击率是怎么搞出来的?(c#)
3.求聊天系统中客户端通信C/C++源代码!!!
4.å¦ä½ç¼åç®åçsocketç½ç»ç¨åº å¦ä½ç¼ååºäºTCPåè®®çç½ç»ç¨åº
5.C++ä¸å¦ä½å®ç°ç«¯å£çè§
6.如何判断连接上了winsock
10个增强微软Office功能的精品插件
Microsoft Office办公组件在我们的日常工作生活中起着不可忽视的作用。可以说,如今的波段轨迹指标源码生活离不开Office办公组件。本文推荐十款增强性应用插件,帮助拓展Office功能,帮助用户更好的使用办公软件。
拓展Outlook使用功能系列
用户往往将Outlook仅仅作为电子邮件客户端和通讯录。而下面的两款插件可以发挥它其它的功能。
1、Xobni邮件分析工具
这款优秀而免费的插件让Outlook变的智能化。用户可以共享和搜索Outlook中的邮件地址和电话号码。Xobni对之进行智能过滤,当用户键入搜索人名字时,关于该人的所有的信息都会呈列出来。
未来Xobni将可直接整合进Gmail搜索框,帮助你在搜索时候进行自动建议。其它未来将实现的功能还包括搜索联系人时候的搜索建议、电话号码搜索和附件搜索。
2、PocketKnife Peek可以让HTML文件像文本一样阅读
也许用户会对HTML邮件感到质疑,是不是恶意邮件呢?别担心,使用PocketKnife Peek免费插件,让你阅读HTML邮件就像阅读文本一样。可还可以查看HTML源代码和Internet标题。PocketKnife Peek与Windows XP、Vista和7均兼容。
让微软Office和谷歌协作
微软的Office和谷歌基于网络的应用程序本是互不相关,但是以下两款工具却可以让它们合作。
3、CompanionLink for Outlook同步Outlook工具
CompanionLink可以通过谷歌日期和Gmail同步Outlook。
谷歌日历与Outlook日期有时是不同步的,而Outlook通讯录与Gmail通讯录往往也是不同步的。使用CompanionLink可以解决这个问题。不过该插件是收费的,美元,可以试用天。它可以自动同步Outlook,Gmail和Google Calendar,因此你不用担心重复输入信息或是当日历和联系人不匹配时需自主调合冲突。它可以运行在Android设备上,用它作为将Outlook 联系人信息同步到Android设备上的一个中介。
4、Google Cloud Connect同步Office文档
Microsoft Office是创建文档的最佳工具,但却不好共享。Google Docs却可以容易共享,因为它们使用云连接进行存储的,但是创建文档的效果却没有Office好。
这款Google Cloud Connect免费插件,是谷歌创造的。可以让你的Office文档以Google Docs文档形式保持,然后可以同步它,以便用户在别处查看。
Master the Interface界面控制工具系列
想更快速的使用Office界面吗、下面三个工具可以帮助你。 5、Office Tab Free标签工具,让Office文档呈现一个标签式的界面
通常情况下,打开多个Office文档时,工作会变得复杂,反应还会慢。而免费的Office Tab标签工具可以让Word、Excel和PowerPoint呈现一个标签式的界面。类似于浏览器那样的界面。这样,soot源码编译你可以在一个界面中随意切换查看多个文档。另外,还有付费版的位标签工具,增强了诸如单击即可关闭所有标签的功能。
6、Ribbon Helper for Office可以采用悬停改变Ribbon标签。
有时候,一些Office操作会很繁琐。如当你想移动Ribbon标签时,你每次必须要点击目的地。Ribbon Helper for Office(美元。有一个天使用版本)可以让你无需点击,只要鼠标悬停在目的地,标签就会自动移动。
7、Search Commands搜索命令
Search Commands链接的是用户想要执行的任务命令。不确定如何在Office中执行一个特定任务怎么办呢?使用Search Commands,它是微软提供的免费工具,可以轻松了解如何执行复杂的任务,并指导你进行工作。在Ribbon界面上,Search Commands直接集成到Word,Excel和PowerPoint中作为一个新选项。点击这个选项,输入你想完成的任务,Search Commands就会显示一系列匹配的结果。选择其中之一,根据向导,用户便可轻松完成任务了。
其他插件
下面的三个插件会给Office带来惊奇的一面。
8、Slideboxx使幻灯片演示更方便
如果你做了很多的简报,导致很难查询确切的幻灯片、信息和资源介绍。那么使用Slideboxx,它可以索引你的演示文稿,帮助你快速定位到想查询的地方。你还可以从现有的幻灯片演示文稿中拖动部分幻灯片文稿,从而建立新的PPT。使用过的用户都会觉得它为之节省了很多时间。Slideboxx可免费试用天,购买需美元。
9、Advanced Office Password Recovery Home密码恢复软件
Advanced Office Password Recovery使用多种技术帮助用户找回忘记的密码。它通过检查计算机中缓存的密码,然后将它移到一个强大的词典中,蛮力尝试破解密码。免费版本的 Advanced Office Password Recovery Home只能恢复部分密码,完整版需美元。
、Duplicate Remover for Excel删除Excel重复记录软件。
如果你的工作表中数据太多,难免会遇到数据记录重复的情况。使用Duplicate Remover,它可以追寻并删除重复的数据。非免费,需美元。
点击率是怎么搞出来的?(c#)
让我们先来分析一下一个用户是怎样被吸引到网站上的。
一般来说,客户都要经历这样的过程:从开始上网时乱逛式的点击(click/pageview),到被内容留住(stickiness),再到被专业性、个人化的定制服务所吸引,注册成为某网站的忠实客户(loyalty),最后被专业的个人化的服务所打动而开始支付(payment),这就是黑马javaweb源码一个客户对网站的需求,它也驱动着网站服务升级。对客户来说,他付出了:上网时间与精力;费用——包括上网电话费和网络使用费、网上购买支付的费用;隐私——为了让别人更好地为你服务,就得牺牲一部分隐私,笔者所付出的代价就是每天都会接到二、三十封商业垃圾邮件。
一个网站得到的是:1.费用方面。获得高点击率后就可以收取一部分广告收入,当然你的内容粘性越大,广告收入越高;ISP接入的费用,也就是用户在你的网上消费的时长;信息分成费用比如中公网上的游戏,能与进行费用分成;电子商务支付的费用,包括买商品、专业数据库查询、炒股服务等等;2.资产方面。对商业网站来说更重要的是获得信息资产,包括——无形资产,如网站知名度,特别是门户网站,用点击率、点击率加客户停留时间来测量;客户资料价值,客户注册后,你可以获得客户资料,分析客户的需求,进行定制性服务,让客户更满意;信息资料集成,网络开设后逐步累积的各类信息资料并相应汇聚成了各种分类数据库;可扩展的技术支持平台,在与客户的互动中日臻完善形成网站独特的可扩展的技术平台,并可随着市场与客户需求的变化而在这一平台上不断增加内容与服务手段、成熟和具有扩展性的品牌形象、组织结构和工作流程。
以客户分析入手总结一个网站的收入流是投资银行较常用的手段,主要包括以下指标:1.页面访问次数(pageview)——点击率;2.停留时间——粘性;3.回访率——忠诚度;4.支付。这是网站的未来收入和资产定价的基本标准。高盛公司最早评价门户网站的模型就是所谓市值比访问量模型(Steve Harmon),从而计算出Yahoo!每个客户价值为美金,通过这个相对指标大致可以估算每一个客户的价值,再根据客户增长的速度反过来推算网站的市场价值;随着网站内容的丰富,特别是Internet在近3年内由信息搜索发展到虚拟社区使得内容的粘性日渐变成评价指标,于是衡量网站价值的模型= 页面访问量*停留时间,高盛以此为依据认为AOL的客户价值超过Yahoo!。年以来电子商务的快速发展使得注册客户量越发显著——即客户忠诚度和客户信息对于销售者有着重要的意义。Yahoo!从单一门户到提供大量个性化服务而获得注册客户的显著增长,从而获得了巨额的中介收入而演变为电子商务的门户,成功的转型是它高股价的业绩来源,同时也从某种角度证明:注册客户成为更具有价值的群体,因此第一种评估方法有被改进为市场价值/注册客户价值,通过对注册用户增长率进行分析(Subscriber growth),而且把注册客户带来的无形收益进行统计(per user statistic)——客户的支付率和支付能力,常用的指标是市价/销售额(Price/Sales rate) 模型。
商业网站评估还有一个不可忽视的内容就是对未来的预期分析。众所周知,如果网络公司不是代表了未来的商业模式,类似Amazon这样连续5、6年都亏损的公司,估价可能只有5美元,而不是现在的美元,可从数学分析角度就很难估价未来预期。但相对指标对描述客户价值是非常有益的,而且对寻求上市的网站公司的价值评估也起到重要的作用。按照目前我国的上市公司数据披露原则,利用收益/现金流贴现来评估网络公司价值将成为最重要的方法,所以在具体运用中就必须要把预期商业平台的扩展纳入到评估体系里,必须要考察网站平台的扩展性和独特性。
市场/客户的源码赚亿需求一步一步地驱动着网站向成熟商业模式发展,同时网站本身又有着自己为满足需求进行的供给性驱动,两者的合力共同推动着互联网站服务的变化。
网络技术和商业运营平台的价值
互联网领域中许多网站的建立是根据不同资源推动建立的,大致可分为两大类型:早期的公司主要是以技术作为驱动的,创始人都是计算机或通讯技术等方面的人才或爱好者,由自娱自乐到创造出有特色的网络服务模式,杨致远与Yahoo!、丁磊与Netease都是典型代表,在市场利益的推动下从网络的技术平台转向网络的商业平台;另一种则是从纯粹的商业模式出发,往往与大量的风险资本和商业合作伙伴相关联构成新的网络公司,如Amazon、eBay,中国的 sohu、等。年代中后期以前主要是技术推动为主,随着资本市场对网络认可度的加强,商业模式是最主要的网络公司的驱动因素,技术推动的公司也逐步转向了以商业模式驱动的公司,商业运行平台的作用越来越重要。由此就不得不深入研究网络公司价值驱动的重要因素——技术和与之配合的商业运作平台的拓展性(Scalability)。
技术平台应该包含:接入技术——包括接入途径的多样化、接入设备的多样化和接入速度的快速性;内容技术——由于接入技术的迅猛发展,网站开发的内容技术也就将从以文本为主的内容开发模式转向内容的多媒体;软件技术——主要是软件跨越多种硬件平台的技术,要求有比较好的适应性,如现有的JAVA编程软件等;安全技术——电子商务的核心是安全,包括自己网站本身的安全、数据库的安全、支付安全等;应用技术——如个人通讯和交互能力等;数据库技术——支撑个性化和极大化扩展的能力,以及潜在的技术创新和模仿能力。
网络虚拟商业运营平台应该包含:网站前景和战略;现有规模和未来规模扩展性,包括横向和纵向平台的扩展性;商务模式风格,比如,是选择媒体的商业运作还是选择电子商务,电子商务中选择B TO C还是B TO B等;网络品牌的递延能力和品牌策略;营销能力,包括营销战略、市场推广、配销体系和渠道管理,库存和内部形成的价值链;财务和融资能力;吸收和创造价值的能力;独特的战略资源和广泛的战略联盟关系;等等。
中国网络技术平台的价值=技术的应用能力+技术变革的适应能力。完全的技术创新能力可能对中国是不完全适合的,如在中国窄带的既定条件下过分追求多媒体技术,就会影响技术的应用空间。在中国不是越领先的技术就是最好的,而是最实用的技术可能是最佳的,因此技术创造出的价值最高的评价标准是:网民受众量,包括潜在的网民,如移动电话和呼机用户本不是互联网的网民,通过WAP技术和双向寻呼技术,有可能一下子使他们成为网民,如果一项技术能创造出最好的性能价格比使得网民受益或通过一项技术扩大了潜在的网民,都是非常有价值的技术。
网络商业虚拟平台比传统的商业运作平台更具有扩展性,Amazon从卖书到CD,再到玩具等等,其扩展速度比真实商业扩展的速度快、地域广,甚至连中国的客户都到Amazon上直接买书,这种生长力度是传统商业不可比拟的,但是网站商业平台要符合现有的一系列外在环境,也要符合传统商业的规矩——即外在的商业环境、品牌的递延性、加入新商业业务单元的成本收益等,也就是说平台扩展是有其客观局限性的,所以笔者认为不管当前网络公司经营的方式方法是怎样的,未来向专业化转变的趋势是不可避免的。另外,联盟kof源码网络的商业平台必须和现实的商业平台相配合才能实现,传统商业平台是靠传统因素相砌而成的,现在也不可能完全虚拟,网站实际上是混合的商业模式——即现代和传统的混合才有可能比较成功。光有信息的虚拟商业平台是完成不了消费者支付的,Amazon作为世界级电子商务的领头羊仍然需要传统的“仓库”,不管概念怎样领先也需要建设好配送系统,因此中国的商业平台可能是:“信息(包含客户价值等)+虚拟商业扩展+传统因素”才能实现。
必须指出的是,中文网络商业平台中还需要包含对新知识内涵的尊重——也就是对“知本”要素的重新诠释。在现时代中国公司法律框架下,如何确定内部组织中人力资本股权和相应的知识与商誉股权以及保护出资人利益,都会影响着中国网络公司的创新能力。Internet网络实质上是以知识为核心竞争力的创新性企业,如果没有知识创新的组织模式,则核心竞争力也就没有了。
高盛公司的门户网站分析报告中指出成功网站必须具有6c要素:即连接性(connect)、导航(context)、内容性(content)、商务(commerce)、通信(communication)、社区性(community);现在又提出转向新6C,即方便性(convenience)、聚合性(convengence)、整合(consolidation)、竞争性 (competition)、合作性(cooperation)和客户关系(customer relationships)。高盛的研究也突出强调了客户和技术平台的问题,而在新6C中更多地引进了技术变革性含义,如接入和接入设备的多样性,但更重要的是引入了商业规则,如客户关系、合作性和竞争性。这一点笔者更欣赏约翰·哈格尔三世在其《网络价值》中对分析模型的分解性的研究,从而能细致地评价一个网络公司的价值和其已具有的和潜在的竞争优势。有学者把其归纳为下图:
投资的目的是为了盈利——投资Internet也同样就是让网络公司能获得更快的发展机会,如果网络公司始终达到不了利润增长预期,其结果就会是“泡沫破灭”。所以网络的心理预期可以说是生死攸关。笔者以为一个好的网络公司必须具备四大预期要素
★ 扩大网络服务客户的能力
★ 从单一的服务项目领导地位变为行业的领袖,以至有可能是自己的网络商业平台和模式标准成为公认的典范,具有可持续发展能力
★ 具有快速容纳各类商业模式的能力,使网络上商业平台虚拟扩展能力具有韧性、弹性与可塑性
★ 有明显增长的现金流和利润指标预期
美国的莫斯管理咨询公司的研究认为,在线服务的企业价值基本上由客户群以及市场营销资产(占%到%)、数据软件和其他知识产权资产(占%到%)、其他有形资产(占%到%)等3大部分组成。
笔者以为,虽然客户群概念很重要,但其与市场营销资产的比重明显过高,网络公司不仅要增加资产,更要找到盈利的道路——即所谓的商业模式,所以必须加上商业模式,还有知识创新能力。
商业模式左右资本价格
从投资者角度来说,对高速增长的、在一个市场中占主导或引导地位的公司必然会表现出热情。在美国,投资者所青睐的,如Yahoo、AOL、eBay、 Amazon等,都是在一个战略性的、高速增长的市场里占有主导性地位的公司,而且这些公司成长得很快。能够在快速增长的市场中占领先地位,有很好的、有经验的管理团队,有可行的、具有说服力的商业模式,一般说都将受到投资者的青睐。
目前中文互联网公司的商业模型大都拷贝自美国,实际上成功的商业模式会是各种各样的。但不管是哪种商业模型,成本/利润概念与投资效益分析,取得一个用户需要多少成本,为这个用户服务要花多少成本,用户在使用服务的生命周期里能为公司带来多少收益,这些都是不可忽视的问题。以电子商务为例,据信息产业部透露的一些最新数字:国内电子商务网站已发展至多个;年总交易额达2亿元,较年增幅达一倍以上;预计近两年将进入快速增长期,预测 年底电子商务交易额将达8亿元,而到年有望达到亿元。这样快速发展的势头完全可以探索具有中国特色的服务模式。
即使在美国,当前投资者对网络公司的态度与前些年也有了明显的变化,突出表现在对长时间亏损的看法上,至少是区别对待的。具体而言,对于B2B模型的网络公司,投资者关注的是有没有一个有说服力、能成功的商业模型,如果能在短期或中期执行商业计划,投资者会容忍暂时的亏损;而像yahoo、eBay这样处于相对成熟的市场,有相对成熟的商业模型、一流管理团队的网络公司,投资者就会比较注重盈利。对于一直领导B2C模式的商务先锋Amazon公司,从去年底的种种变化分析,投资者正在慢慢失去耐心,因为在市场日益成熟、商业模型清楚的情况下,公司仍然不断地亏损,且亏损数额正在不断增大,已使投资者对其产生利润的信心越来越低了。
如果从资本市场角度分析,互联网题材的实际深度和广度不但远远超越以往,而且也完全突破了行业和生产方式的局限,达到了一个更高的境界。网络股作为一种题材由兴盛至衰败的轮回周期决非三年五载就会宣告结束的,从这个意义上讲,资本市场中的网络概念受青睐的程度将在未来相当长的一段时间保持较快的上升势头,网络股具有被市场接受和认同更宽阔的市盈率弹性区间。通常而言,传统行业的市盈率震荡区为5-倍;而传统高科技公司股价的市盈率震荡区间为- 倍;网络股较传统高科技公司具有更广阔的市盈率区间早作为国际资本市场的一种共识,因而以市盈率指标来简单判断网络股的炒作显然是不合适的。
在年,国内的网络股主要指有线电视网络为主,而年后网络股已明显向互联网转向,显然是受到境外上市的刺激,特别是China.com的上市成功,以及大量的国际风险投资进军中国,增添了人们对网络公司的想象力。中国控股网络公司是符合中国A股市场规则的,因为中国股票市场是主板市场,其主要特征是按收益来评判股票的股价,而二板市场则主要以活跃度评价股票。中国上市公司通过出资控股网络后,可以促进网络公司成长,如再能到境外融资和上市,上市公司还可以获得丰厚的资产回报。这样上市公司既可以保证上市公司自身业绩,同时为未来获得收益打下了基础。主板市场永远是按业绩评价公司的,不可能完全靠概念,而现有的中国网络公司基本上盈利能力不好,现正处于需要投资的时期,核心是提高客户群价值、虚拟商业平台的价值和与传统配送、支付等商业环境互动,从而获得资产增值。
当前阶段笔者认为境外投资者最为看重的是网站的商业模式,或者独特的资源——如中国概念,中华网的新华社;本地化的忠实客户群体;本地化的配送体系;网站技术和商业运营平台扩展性等。因此我们在衡量一个网站时,要以国际投行的角度来评价,在国内,投资人的眼光评价控股网络公司的上市公司一定仍是“业绩+概念”,网络公司在未来可能会得到资产性收益,但当前不能获得收益,而且可能需要上市公司继续不断的投资。但因上市公司对其控股的网络公司投入过度,导致上市公司收益严重下降,这就非常危险了。控股网络公司的上市公司未来从网络公司中获得的主要收入是投资溢价,从而提高上市公司的资产净
参考资料:
VSS使用手册
软件测试的相关文档,测试代码、自动化测试程序代码均需要作为配置项,纳入到配置管理库中。vss是一个简单实用的工具,希望大家测试工作中,合理的使用vss.
1 VSS概述
版本控制是工作组软件开发中的重要方面,它能防止意外的文件丢失、允许反追踪到早期版本、并能对版本进行分支、合并和管理。在软件开发和您需要比较两种版本的文件或找回早期版本的文件时,源代码的控制是非常有用的。
Visual SourceSafe 是一种源代码控制系统,它提供了完善的版本和配置管理功能,以及安全保护和跟踪检查功能。VSS通过将有关项目文档(包括文本文件、图象文件、二进制文件、声音文件、视屏文件)存入数据库进行项目研发管理工作。用户可以根据需要随时快速有效地共享文件。文件一旦被添加进VSS,它的每次改动都会被记录下来,用户可以恢复文件的早期版本,项目组的其他成员也可以看到有关文档的最新版本,并对它们进行修改,VSS也同样会将新的改动记录下来。你还会发现,用VSS来组织管理项目,使得项目组间的沟通与合作更简易而且直观。
VSS可以同 Visual Basic、Visual C++、Visual J++、Visual InterDev、Visual FoxPro 开发环境以及 Microsoft Office 应用程序集成在一起,提供了方便易用、面向项目的版本控制功能。Visual SourceSafe 可以处理由各种开发语言、创作工具或应用程序所创建的任何文件类型。在提倡文件再使用的今天,用户可以同时在文件和项目级进行工作。Visual SourceSafe 面向项目的特性能更有效地管理工作组应用程序开发工作中的日常任务。
1.1 VSS中的文件
当你要修改某个文档时,需要先从数据库中将它签出(check out),或者告诉VSS你要编辑该文档。VSS会将该文档的副本从数据库中拿到你的工作文件夹(working folder)中,你就可以修改你的文档了。如果其他用户再想对同一文档进行修改,VSS会产生一个信息,告诉他,该文档已被签出(check out),从而避免多人同时修改文档,以保证文档的安全性。
当你完成修改之后,需要将文档 签入(check in)VSS。这个操作从你的工作文件夹(working folder)中复制被你修改的文档,并将它放回VSS数据库,以便其他用户能够及时看到文档的改动。VSS能够保存文档的所有改动,并显示最新版本,同时早期版本也会被跟踪记录下来。VSS对反增量技术的运用,仅需要用很少的磁盘空间就能使得用户获取文档的所有版本。
如果你没有修改文档,你可以执行撤消签出(undo check out)命令,文档将被保存为被签出(check out)之前的状态。
如果你只需读取某一文档而并不需要编辑它,你可以执行取出(get)命令,将文档放入你的工作文件夹,再选择查看文档(view),来查看你的文档的最新版本。
1.2 VSS中的项目
项目(project)是指用户存储在VSS数据库中的所有文件(file)的集合。用户可以在项目之间或项目内部实现文件的添加(add)、删除(delete)、编辑(edit)、共享(share)。一个“项目(project)”在很大程度上类似于一个普通系统的的文件夹,不同的是它能更好地支持文件合并(merge)、跟踪(archive)和版本控制(version control)功能。
文件保存在VSS数据库中的项目(project)里。你无须管理存储在VSS 中的文件正本,除非你要检查或与其它拷贝进行比较。
VSS为每一位用户提供了一份备份文件放入工作文件夹(working folder),供用户对文件进行查看与编辑。尽管没有工作文件夹也可以查看文件,但要想真正实现对文档的处理,必须建立工作文件夹。
1.3 VSS的版本控制功能
VSS能够保存文件的多个版本,包括文件版本之间每一处微小的变动。版本控制有以下几方面的内容:
l 组内合作——在缺省的情况下,一般一个文件在某一时间只允许一个用户对其进行修改,这样可以防止文件意外地被其他用户改动或者覆盖。但管理员可以改动这种缺省的设置,允许文件多层签出。这种设置也能防止过多的、不必要的改动。
l 版本追踪——VSS能够对源代码和其他文件进行存储和早期版本的追踪,从而实现重建文件早期版本等有关功能。
l 跨平台开发——在多平台开发的情况下,版本追踪用于维护核心代码。
l 代码的再使用—— 追踪程序基准使得代码可重用。
1.4 文件的拆分和共享
在VSS中可以实现一个文件被多个项目共享(share)。在一个项目中对文件的改动可以自动反映到其他共享的项目中去。这正提倡了代码重用。在file菜单中的properties中,点击link,可以查看某一文件的共享情况。
拆分(branch)是将文件从原来共享的项目中分离出来的过程。它使得VSS可以实现从不同的路径追踪文件。
注:在其他版本控制系统中,分支是通过跟踪版本号来实现的。例如:版本“2.3.9.2”是版本2.3的第二个修订版本的第九个分支。而VSS通过明显不同的项目名称实现对文件分支的跟踪。
拆分文件就断开了共享连接,使得本项目中的文件与其他原来共享的项目无关。对此文件的修改将不会再反映到其他项目上。拆分是这样被建立的:两个文件以前有着共同的历史记录,从实现拆分开始,他们的历史记录将被VSS分别追踪。
拆分文件之后,link按纽将不再显示已断开的连接,但你可以用path(file菜单中的properties项)按纽浏览拆分的历史记录。
共享(share)文件就是在多个项目间建立文件的连接。拆分(branch)文件就是在项目之间建立了不同的文件路径。
1.5 工作文件夹(working folder)
VSS是存储和管理文件的工具,但是编辑和编译文件必须在VSS指定文件夹中进行。这个文件夹叫工作文件夹,它可以是现存的文件夹,也可以是VSS新建的文件夹。VSS浏览器在文件列表上方显示了文件的工作文件夹的路径。
在VSS系统中,工作文件夹才是你真正用于处理文档的地方。当你要编辑或修改某个文档时,必须对文档实施check out 操作(详见3.3.5修改和编辑文件),VSS将该文档从项目中拷贝出来,放入你的工作文件夹。当你修改完毕并check in 文件之后,VSS又将文件重新拷贝到数据库中以记录你的修改。
一旦你将文件签出,VSS就开始在你的本地机上创建并管理你的工作文件夹。
每一个用户、每一个项目或每一台微机都可以有自己的工作文件夹。如果Joe在项目$/SpreadSheet和$/WordProcessor上工作,他就有相应的2个不同的工作文件夹。如果Hanna在同样的项目上工作,对于每一个项目她又有自己的工作文件夹。
当你为某个项目设置了工作文件夹,你可以用它来放置你该项目中包括子项目再内的所
2 VSS的客户端安装
2.1 安装VSS的系统条件
l 计算机/处理器: 处理器为DX/MHz或以上PC机推荐Pentium或更高级的处理器。
l 内存:Windows 或以后的版本要求 MB RAM (推荐 MB);Windows NT 4.0要求 MB (推荐 MB)。
l 硬盘:客户机:典型安装:MB; MB;安装过程: MB;
l 服务器:典型安装: MB;最大安装: MB;
l 附加硬盘要求:Internet Explorer:典型为 MB,最大 MB;MSDN:典型MB,最大 MB
l 驱动器:CD ROM
l 显示:VGA或更高级显示器,推荐Super VGA。
l 操作系统:Microsoft Windows 或以后版本或者Microsoft Windows NT 4.0,NT要求Service Pack 3或更高版本(包括Service Pack 3〕
l 外围设备/其它: Microsoft Internet Explorer 4. Service Pack 1 (包含).
2.2 从网络安装VSS客户端
1) 打开本地计算机的“网上邻居”属性对话框;
2) 点击“配置”按纽;
3) 将“MICROSOFT网络用户”的属性设置为:登录到WINDOWS NT 域,域名为PLANNING;
4) 添加TCP/IP、NETBEUI、IPX/SPX协议;
5) 重新启动计算机,登录“planning”域;
注:管理员为每位NT用户设置的登录密码为“”,用户在第一次登录时,计算机会提示用户修改密码。
6) 从“网上邻居”的“planning”域中查找服务器“VSSDATA”;
7) 打开共享的“VSS”文件夹并双击“NETSETUP”;
8) 按照安装程序的提示开始安装。
3 VSS的基本使用操作
3.1 登录VSS
点击VSS图标或从程序菜单中运行Visual SourceSafe 6.0,即可打开VSS浏览器。
如果用户登录的VSS密码和登录PLANNING域的密码是一致的,系统将不再提示输入进入VSS数据库的密码;如果用户为VSS设置的密码与登录PLANNING域的密码不同,系统将提示用户输入VSS的登录密码。关于如何修改VSS用户密码,详见“3.2.修改用户密码”。
3.2 VSS浏览器
当你一打开VSS,如果你设定了密码的话,它会提示你输入密码。如果你没有设定密码,你可以直接看到浏览器。在浏览器上,你可以浏览你的数据库、查看项目列表、显示文件统计信息、执行命令对文件和项目进行操作等。浏览器的最上方的标题栏是你当前连接的数据库。VSS使用符号来提供有关文件和项目信息。
菜单栏的下面是常用工具栏,这里有许多常用命令的按纽,它可以帮你快速地执行对文件的操作。
在项目栏中,显示有项目列表,包括特殊项目的有关信息。文件栏显示了当前项目的所有文件的列表。结果栏显示当前你所执行的操作的结果。
3.3 VSS基本操作
3.3.1创建新的文件夹
1) 选中要创建新文件夹的项目(上级文件夹);
2) 在file菜单中选中creat project;
3) 写入要添加的文件夹的名称,同时也可以在comment栏中为新建的文件夹添加备注;
4) 点击OK。
3.3.2添加文件夹
1) 选中你要添加文件夹的项目(上级文件夹);
2) 在file菜单中选中add files;
3)在文件夹列表中选中要添加的文件夹;
4)点击add,同时可以在comment栏为你添加的文件夹做一个简单备注;
5)如果你要连同子文件夹一起添加,选择Recursive;
5) 点击OK,成功添加了一个带有备注的文件夹。或者点击close,退出操作,返回add files对话框,点击close。
3.3.3添加文件
3.3.2.1使用add命令添加文件
1)选中你要添加文件的文件夹;
2) 在fil菜单中选中add files;
3) 在文件列表中选中要添加的文件;如果要添加多个文件,可以使用CTRL键或SHIFT键,同时选中多个文件;
4)点击add,同时可以在comment栏为你添加的文件夹做一个简单备注;
5)点击OK。
3.3.2.2用拖动的方法添加文件/文件夹
1)打开VSS浏览器,调整其大小,使得Windows资源管理器能够显示出来;
2)打开Windows资源管理器,调整大小,使得两个浏览器可以同时显示;
3)从Windows资源管理器中选择你要添加的文件或文件夹;
4) 拖动你所选的文件或文件夹,放入VSS浏览器,文件被添加进项目,而添加的文件夹将作为项目的子项目。
3.3.3查看文件
1) 在文件列表中选中要查看的文件;
2) 在EDIT菜单中选中view,打开对话框;
3)选中view SourceSafe’s copy of this file;
4)点击OK。
3.3.4创建
求聊天系统中客户端通信C/C++源代码!!!
#include "stdafx.h"
#include <Winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <iostream>
#include <string.h>
using namespace std;
#pragma comment (lib,"ws2_.lib")
int _tmain(int argc, _TCHAR* argv[])
{
WORD wVersionRequested;//版本号
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 1 );//1.1版本的套接字
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}//加载套接字库,加裁失败则返回
if ( LOBYTE( wsaData.wVersion ) != 2 || HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup( );
return 0;
}//如果不是1.1的则退出
SOCKET sockClient = socket(AF_INET,SOCK_STREAM,0);//创建socket SOCK_STREAM表示TCP
if (sockClient==INVALID_SOCKET)
{
cout<<"INVALID_SOCKET"<<endl;
}
SOCKADDR_IN addrClient; //设置相关地址结构
cout<<"ip"<<endl;
char ip[]=".0.0.1";
cin>>ip;
addrClient.sin_addr.s_addr=inet_addr(ip);
addrClient.sin_family=AF_INET;
addrClient.sin_port=htons();//设置server端端口号,你可以随便设置
//连接
int x=connect(sockClient,(SOCKADDR*)&addrClient,sizeof(SOCKADDR));
if (x==SOCKET_ERROR)
{
cout<<"连接出错"<<endl;
return 0;
}
while(1)
{
char ddb_send[]="\0";
cin>>ddb_send;
if (strcmp(ddb_send,"exit")==0)
break;
char * buf=ddb_send;
int y=send(sockClient,buf,,0);
if (y==SOCKET_ERROR)
cout<<"SOCKET_ERROR"<<endl;
}
closesocket(sockClient);//关闭
WSACleanup();
return 0;
}
å¦ä½ç¼åç®åçsocketç½ç»ç¨åº å¦ä½ç¼ååºäºTCPåè®®çç½ç»ç¨åº
ããä¸é¢æ¯ä¸ªäººç¨äºä¸ä¸ªåéå·¦å³çæ¶é´ç¼åçç¨åºï¼å¨è¿ç¼åè¿ç¨ä¸ï¼é常éè¦çä¸ç¹å°±æ¯ï¼ è¦ç解 tcpåè®®ç¼åç¨åºçåçï¼å³ç¼åæå¡å¨ç«¯çè¿ç¨ï¼ä»¥åç¼å客æ·ç«¯çè¿ç¨ã åªè¦ææ¡è¿ä¸¤ç¹å°±å¯ä»¥å¾å®¹æç¼ååºæ¥äºï¼ä½æ¯è¦å¿«éç¼ååºè¿ä¸ªç¨åºï¼é£ä¹VC6.0å¼åå·¥å ·éï¼æ好è¦å®è£ ä¸ä¸ªçªèæ件ï¼è¿ä¸ªæ件å¯ä»¥å¿«éæé«ä½ çç¼åç¨åºçæçï¼è¿æä¹è¦å®è£ msdn ææ¡£ï¼è¿æ ·å¨ç¼åè¿ç¨ä¸ï¼éå°å¯¹æ个å½æ°çåæ°æ³ä¸å ¨çæ¶åï¼ä½¿ç¨msdnå°±è½å¿«éå¸®ä½ åå¿äºã åµåµï¼å¦æä½ é£ä¸å¤©å»é¢è¯ä¸å®¶çé¼çå ¬å¸çåï¼å¾æå¯è½å°±æ¯ å¨ç¬è¯å®æä¹åï¼å°±è¦è¿è¡æºè¯äºï¼è¿å°±å®å ¨èæ¥åºä½ ççæ£ç¼ç¨æ°´å¹³äºã è½å¨æçæ¶é´éå®æä¸ä¸ªsocketç½ç»ç¨åºï¼é£ä¹å°±å¯ä»¥ä»¤é¢è¯å®æå°é常满æäºã ä¸è¿ï¼è¿ä¸ªç¨åºï¼è¿æ²¡æè¿æ¥æ°æ®åºï¼ä»¥åå继ç»æäºã
ããå¦æä½ å»é¢è¯ æ·±å³ç§æå é£å®¶ ä¼æè¾¾ éå¢å ¬å¸ç软件工ç¨å¸çåï¼é£ä¹æºè¯é¢ç®å°±æ¯è¿ä¸ªã å½æ¶æå»é¢è¯ï¼é¦å è¿è¡ç¬è¯ï¼é¢è¯å®å¯¹æç¬è¯æ绩æ¯è¾æ»¡æï¼æ以就å«æçä¸æ¥åé¡¿é¥ï¼ä¸åè¿è¡æºè¯ã å½æ¶æåºèå²ä½æ¯Linuxç³»ç»å·¥ç¨å¸Cè¯è¨ï¼ å¯æ¯ç¬è¯é¢ç®ï¼ä¸ä½èæ ¸Cï¼è¿èæ ¸C++ï¼JavaScriptï¼htmlã ææè§å¥½å¥æªï¼å¿éæ³ï¼å¥½åææ¯åºèVC++å¼åé£ä¸ªå²ä½äºã äºæ¯æçå°ä¸åï¼ä»æ¿æ¥æºè¯é¢ç®ä¹æ¶ï¼æçæ£æç½ï¼æç¶æ¯ä»è¦å®ææä»äºVC++å¼åäºï¼é¢ç®å°±æ¯ï¼ç¼ååºäºTCP/IPåè®®ç½ç»ç¨åºï¼å¹¶å®ç°ç®åçè天ç¨åºï¼èä¸è¦è¿æ¥æ°æ®åºã å½æ¶æå失æäºã äºæ¯æå°±æåºï¼æä¸æ³åè¿ä¸ªé¢ç®ï¼å 为ææ¯æ³åºèLinuxç³»ç»Cè¯è¨å¼åçã å°±è¿æ ·å¤±æçèµ°äºã
ããä¸é¢æ¯ä¸ªäººå®å ¨è½è¿è¡ç代ç ï¼
ããæå¡å¨ç«¯æºç ï¼
ãã#include<stdio.h>
#include <Winsock2.h>
#pragma comment (lib,"ws2_.lib")
ããint main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return 0;
}
ããSOCKET socketServer=socket(AF_INET,SOCK_STREAM,0);
ããSOCKADDR_IN addrServer;
ããaddrServer.sin_family=AF_INET;
ããaddrServer.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
ããaddrServer.sin_port=htons();
ããbind(socketServer, (struct sockaddr *)&addrServer, sizeof(struct sockaddr));
ããlisten(socketServer, 5);
ããSOCKADDR_IN addrClient;
ããint addrLen=sizeof(SOCKADDR_IN);
ããchar sendBuf[];
ããchar recvBuf[];
ããint i=1;
while(1)
{
printf("æå¡å¨ç«¯çå¾ ç¬¬%d个客æ·ç«¯è¿æ¥è¯·æ±...\n", i++);
ããSOCKET newsocketServer=accept(socketServer,(struct sockaddr *)&addrClient, &addrLen);
ããif(newsocketServer!=INVALID_SOCKET)
{
printf("æå¡å¨ç«¯ä¸å®¢æ·ç«¯è¿æ¥æå...\n");
}
ããmemset(sendBuf,0,);
ããsprintf(sendBuf,"Welcome you to come here");
ããsend(newsocketServer, sendBuf, strlen(sendBuf)+1,0);
ããmemset(recvBuf,0,);
ããrecv(newsocketServer,recvBuf,,0);
ããprintf("æå¡å¨ç«¯æ¶å°ä¿¡æ¯:%s\n",recvBuf);
ããclosesocket(newsocketServer);
}
ããWSACleanup();
ããreturn 0;
}
ããæ¤æç« æ¥èªäºä¸ªäººåå®¢ï¼ é¿æµªå客 /wenxianliang@/
ãã客æ·ç«¯æºç ï¼
ãã#include<stdio.h>
#include <Winsock2.h>
#pragma comment (lib,"ws2_.lib")
ããint main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
return 0;
}
if ( LOBYTE( wsaData.wVersion ) != 2 ||
HIBYTE( wsaData.wVersion ) != 2 ) {
WSACleanup( );
return 0;
}
SOCKET socketClient=socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN addrServer;
addrServer.sin_family=AF_INET;
addrServer.sin_addr.S_un.S_addr=inet_addr(".0.0.1");
addrServer.sin_port=htons();
char sendBuf[];
char recvBuf[];
ããprintf("客æ·ç«¯åæå¡å¨ç«¯è¿æ¥è¯·æ±...\n");
ããint Isconnect=connect(socketClient, (struct sockaddr *)&addrServer, sizeof(struct sockaddr));
ããif(Isconnect!=0)
{
printf("客æ·ç«¯æ æ³è¿æ¥æå¡å¨ç«¯...\n");
ããreturn 0;
}
ããprintf("客æ·ç«¯å·²æåè¿æ¥æå¡å¨ç«¯...\n");
ããmemset(recvBuf,0,);
recv(socketClient,recvBuf,,0);
ããprintf("客æ·ç«¯æ¶å°ä¿¡æ¯:%s\n",recvBuf);
ããmemset(sendBuf,0,);
sprintf(sendBuf,"Hello , I am Mr Wen !");
send(socketClient, sendBuf, strlen(sendBuf)+1,0);
closesocket(socketClient);
WSACleanup();
return 0;
}
C++ä¸å¦ä½å®ç°ç«¯å£çè§
ççæ没æç¨
==============
#include "stdafx.h"
#include <winsock2.h>
#include <windows.h>
//#include <stdio.h>
#include <stdlib.h>
#include <fstream.h>
DWORD WINAPI ClientThread(LPVOID lpParam);
int main(int argc, char* argv[])
{
if (argc!=2)
{
printf("using: listen [your ip address]\nfor example:\n listen ...2\n");
return 0;
}
WORD wVersionRequested;
DWORD ret;
WSADATA wsaData;
BOOL val;
SOCKADDR_IN saddr;
SOCKADDR_IN scaddr;
int err;
SOCKET s;
SOCKET sc;
int caddsize;
HANDLE mt;
DWORD tid;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
printf("error!WSAStartup failed!\n");
return -1;
}
saddr.sin_family = AF_INET;
//æªå¬è½ç¶ä¹å¯ä»¥å°å°åæå®ä¸ºINADDR_ANYï¼ä½æ¯è¦ä¸è½å½±åæ£å¸¸åºç¨æ åµä¸ï¼åºè¯¥æå®å ·ä½çIPï¼çä¸.0.0.1ç»æ£å¸¸çæå¡åºç¨ï¼ç¶åå©ç¨è¿ä¸ªå°åè¿è¡è½¬åï¼å°±å¯ä»¥ä¸å½±å对æ¹æ£å¸¸åºç¨äº
saddr.sin_addr.s_addr = inet_addr(argv[1]);
saddr.sin_port = htons();
if((s=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
{
printf("error!socket failed!\n");
return -1;
}
val = TRUE;
//SO_REUSEADDRé项就æ¯å¯ä»¥å®ç°ç«¯å£éç»å®ç
if(setsockopt(s,SOL_SOCKET,SO_REUSEADDR,(char *)&val,sizeof(val))!=0)
{
printf("error!setsockopt failed!\n");
return -1;
}
//å¦ææå®äºSO_EXCLUSIVEADDRUSEï¼å°±ä¸ä¼ç»å®æåï¼è¿åæ æéçé误代ç ï¼
//å¦ææ¯æ³éè¿éå©ç¨ç«¯å£è¾¾å°éèçç®çï¼å°±å¯ä»¥å¨æçæµè¯å½åå·²ç»å®ç端å£åªä¸ªå¯ä»¥æåï¼å°±è¯´æå ·å¤è¿ä¸ªæ¼æ´ï¼ç¶åå¨æå©ç¨ç«¯å£ä½¿å¾æ´éè½
//å ¶å®UDP端å£ä¸æ ·å¯ä»¥è¿æ ·éç»å®å©ç¨ï¼è¿å¿ä¸»è¦æ¯ä»¥TELNETæå¡ä¸ºä¾åè¿è¡æ»å»
if(bind(s,(SOCKADDR *)&saddr,sizeof(saddr))==SOCKET_ERROR)
{
ret=GetLastError();
printf("error!bind failed!\n");
return -1;
}
listen(s,2);
while(1)
{
caddsize = sizeof(scaddr);
//æ¥åè¿æ¥è¯·æ±
sc = accept(s,(struct sockaddr *)&scaddr,&caddsize);
if(sc!=INVALID_SOCKET)
{
mt = CreateThread(NULL,0,ClientThread,(LPVOID)sc,0,&tid);
if(mt==NULL)
{
printf("Thread Creat Failed!\n");
break;
}
}
CloseHandle(mt);
}
closesocket(s);
WSACleanup();
return 0;
}
DWORD WINAPI ClientThread(LPVOID lpParam)
{
SOCKET ss = (SOCKET)lpParam;
SOCKET sc;
char buf[];
SOCKADDR_IN saddr;
long num;
DWORD val;
DWORD ret;
//å¦ææ¯éè端å£åºç¨çè¯ï¼å¯ä»¥å¨æ¤å¤å ä¸äºå¤æ
//å¦ææ¯èªå·±çå ï¼å°±å¯ä»¥è¿è¡ä¸äºç¹æ®å¤çï¼ä¸æ¯çè¯éè¿.0.0.1è¿è¡è½¬å
saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(".0.0.1");
saddr.sin_port = htons();
if((sc=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP))==SOCKET_ERROR)
{
printf("error!socket failed!\n");
return -1;
}
val = ;
if(setsockopt(sc,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
{
ret = GetLastError();
return -1;
}
if(setsockopt(ss,SOL_SOCKET,SO_RCVTIMEO,(char *)&val,sizeof(val))!=0)
{
ret = GetLastError();
return -1;
}
if(connect(sc,(SOCKADDR *)&saddr,sizeof(saddr))!=0)
{
printf("error!socket connect failed!\n");
closesocket(sc);
closesocket(ss);
return -1;
}
// åå ¥æ件:
ofstream oFile("portlog.txt");
if(!oFile)
{
printf("cannot write to the file.\n");
closesocket(ss);
closesocket(sc);
return 0 ;
}
while(1)
{
//ä¸é¢ç代ç 主è¦æ¯å®ç°éè¿ã0ã0ã1è¿ä¸ªå°åæå 转åå°çæ£çåºç¨ä¸ï¼å¹¶æåºççå å转ååå»ã
//å¦ææ¯å æ¢å 容çè¯ï¼å¯ä»¥åæ¤å¤è¿è¡å 容åæåè®°å½
//å¦ææ¯æ»å»å¦TELNETæå¡å¨ï¼å©ç¨å ¶é«æéç»éç¨æ·çè¯ï¼å¯ä»¥åæå ¶ç»éç¨æ·ï¼ç¶åå©ç¨åéç¹å®çå 以å«æçç¨æ·èº«ä»½æ§è¡ã
num = recv(ss,buf,,0);
if(num>0)
{
oFile<<"\n== DATA =========================================\n";
oFile<<buf;
send(sc,buf,num,0);
}
else if(num==0)
break;
num = recv(sc,buf,,0);
if(num>0)
{
oFile<<"\n== DATA =========================================\n";
oFile<<buf;
send(ss,buf,num,0);
}
else if(num==0)
break;
}
oFile.close();
closesocket(ss);
closesocket(sc);
return 0 ;
}
如何判断连接上了winsock
五种查询Internet连接状态[含IP]的方法
1.Powersock控件法:
这种方法最简单,利用FastNet页的Powersock控件的LocalIP属性即可判断:
if(Powersock1->LocalIP==".0.0.1"):在线
else:离线
特点:[1]判断连接状态,[2]获得本地IP。
2.使用URL.DLL的InetIsOffline(0)函数:
Win2K:URL.DLL存放在\SYSTEM\;
Win9x:URL.DLL存放在\SYSTEM\;
用GetSystemDirectory(...)得到系统目录。
InetIsOffline(0)返回值:
TRUE:离线;FALSE:在线。
特点:判断连接状态。
3.WinSock编程法:见程序
特点:[1]判断连接状态;[2]获得本地IP和主机名。
4.WinInet.DLL的InternetGetConnectedState(&dwFlag,0)函数:
注意:为使用该函数,须在项目文件中加入:USELIB("WinInet.LIB")
特点:获得较详的连接描述!
5.RASAPI.DLL的RasEnumConnections函数:
要使用该"枚举所有活动连接"函数,必须:
#include"ras.h"。
若连接数>0:本机当前已连入Internet;
否则:本机当前未连入Internet;
源码如下,在[BCB5+WIN2K+拨号上网]下通过(N字头的为菜单项):
-------------Powersock控件法-----------------------------------------
void__fastcallTForm1::NClick(TObject*Sender)
{
if(Powersock1->LocalIP==".0.0.1")
ShowMessage("未连接:"+Powersock1->LocalIP);
elseShowMessage("已连接:"+Powersock1->LocalIP);
}
-------------URL.DLL的InetIsOffline函数法----------------------------
HINSTANCEhDLL;
typedefbool__stdcall(*FUN)(int);定义DLL函数指针FUN
FUNisOffLine;
void__fastcallTForm1::NClick(TObject*Sender)
{
charBuffer[MAX_PATH];
GetSystemDirectory(Buffer,MAX_PATH);
hDLL=LoadLibrary((AnsiString(Buffer)+"\\URL.DLL").c_str());
if(hDLL==NULL){ ShowMessage("CannotloadURL.DLL!Return...");return;}
isOffLine=(FUN)GetProcAddress(hDLL,"InetIsOffline");
if(isOffLine==NULL){ ShowMessage("CannotloadInetIsOffline(int),Return...");return;}
if(!isOffLine(0))ShowMessage("已连接");
elseShowMessage("未连接");
FreeLibrary(hDLL);
}
------------WinSock法------------------------------------------------
void__fastcallTForm1::NClick(TObject*Sender)
{
WORDwVersionRequested;
WSADATAwsaData;
wVersionRequested=MAKEWORD(1,1);StartupWinSock
WSAStartup(wVersionRequested,&wsaData);
-----------------------------------------
hostent*p;char*p2;chars[];
gethostname(s,);Getthecomputername
p=gethostbyname(s);
p2=inet_ntoa(*((in_addr*)p->h_addr));GettheIpAddress
-----------------------------------------
AnsiStringLocationIP=p2;
if(LocationIP==".0.0.1")
ShowMessage("未连接:"+LocationIP);
elseShowMessage("已连接:"+LocationIP);
WSACleanup();
}
-----------WinInet.DLL的InternetGetConnectedState函数法----------------
void__fastcallTForm1::NClick(TObject*Sender)
{
StaticText1->Caption="";StaticText2->Caption="";StaticText3->Caption="";
StaticText4->Caption="";StaticText5->Caption="";StaticText6->Caption="";
StaticText7->Caption="";
DWORDdwFlag;
InternetGetConnectedState(&dwFlag,0);
if(dwFlag&INTERNET_CONNECTION_MODEM)StaticText1->Caption="Yes";MODEM连接
elseStaticText1->Caption="No";
if(dwFlag&INTERNET_CONNECTION_LAN)StaticText2->Caption="Yes";LAN连接
elseStaticText2->Caption="No";
if(dwFlag&INTERNET_CONNECTION_PROXY)StaticText3->Caption="Yes";代理连接
elseStaticText3->Caption="No";
---------检查是否连接-------------------------------------------
if(InternetGetConnectedState(NULL,0))StaticText4->Caption="Yes";在线
elseStaticText4->Caption="No";
if(dwFlag&INTERNET_CONNECTION_OFFLINE)StaticText5->Caption="Yes";//离线。注:不好用!
elseStaticText5->Caption="No";
----------------------------------------------------------------
if(dwFlag&INTERNET_RAS_INSTALLED)StaticText6->Caption="Yes";
elseStaticText6->Caption="No";
if(dwFlag&INTERNET_CONNECTION_CONFIGURED)StaticText7->Caption="Yes";
elseStaticText7->Caption="No";
}
----------RASAPI.DLL的RasEnumConnections函数法---------------------------
#include"ras.h"
void__fastcallTForm1::NClick(TObject*Sender)
{
RASCONNRASconn[];活动连接数组
DWORDBuffSize;数组所占内存大小;
DWORDConnNum;活动连接数目
RASconn[0].dwSize=sizeof(RASCONN);必须指定一个连接[数组元素]的内存大小;
BuffSize=sizeof(RASCONN)*;
DWORDdwReturn=RasEnumConnections(RASconn,&BuffSize,&ConnNum);
if(dwReturn==0)
{
if(ConnNum>0)ShowMessage("已连接。当前激活连接数:"+AnsiString(ConnNum));
elseShowMessage("未连接。当前激活连接数:"+AnsiString(ConnNum));
}
elseShowMessage("RasEnumConnections函数失败!");
}