Winsock程序员经典问答(中译)之第0部分:引言
0.1 起源介绍
本文档最早是从Mark Towfiq所作的《Winsock必知必会》发展而来。该文档的引言部分如下:
本文档由Mark Towfiq收集整理,特别感谢以下各位的大力支持:Jay Allard、Bruce Backman、Paul Brooks、Martin Hall、Simon Hewison、Mike Morse、Bob Quinn、Ed Schwalenberg、Bill Tang、Dave Treadwell、Fred Whiteside。
0.2 维护者介绍
本文档自1997年开始一直由Warren Young维护并拓展,现在他仍是维护者。1993年,他在DOS系统上写了第一个网络程序,现在写的程序大部分是在Linux和OS X平台的。
0.3 法律事务说明
本文档受版权保护。读者可以将文档考到自己的硬盘上,进行离线阅读。作者保留其他所有权利。
本站点信息,包括其准确性、适当性和对特定目标的适用性,不受任何形式的显式或隐式的担保。使用这些信息就意味着你接受了以上条款。
0.4 镜像
本站点没有官方镜像,获取最新的官方文档,请访问http://tangentsoft.net/wskfaq/。
0.5 对于文档中没有的问题去哪里提问?
目前我知道的询问Winsock相关问题的最好的地方是“栈溢出”(Stack Overflow: http://stackoverflow.com/)论坛。我在RSS阅读器上添加了winsock关注标签,所以我也可以回答你的问题。如果我也无法回答,我可能会找别人获取又快又好的解答。
MSDN文档库包括参考文档、教程乃至全部技术书籍,内容涵盖了微软API的全部主题,包括Winsock。近年来,微软公开了这些文档,并支持网络搜索,因此,没有理由不利用它。这是一个优秀的资源库。
以前,提问的最好途径是通过邮件列表和Usenet新闻组,这些形式存在至今。当时我们讨论的东西现在仍然很有用。你也可以通过Google论坛上的资源获取信息。如果还没有找到有用的东西,选一个搜索引擎试试吧。在以前的某个邮件列表的某个网页中,你没准能找到什么。搜索引擎也可以展示出站点(如栈溢出论坛)上比较新的信息。
大部分通过邮件发给我的问题我都不予回复,因为这违背了FAQ的宗旨。如果我通过邮件回答问题,那么只有一个人从中受益;如果我用同等的精力把这些问题加入FAQ文档,那么所有阅读FAQ的人都将受益。如果我决定不在FAQ中回答你的问题,那么有可能你的问题太罕见,或者太复杂,让我来答不啻于求教免费的私人咨询服务机构,我还不能慷慨到那种程度。
0.6 是否有文档更新历史的邮件列表?
目前还没有。
0.7 本文档涵盖哪些Windows和Winsock的版本?
本文档原来的内容可追溯到Windows 3.1和Winsock 1.1时代,因而这里面有很多历史遗产,对今天的程序员来说不啻于噪音。
2009年末,我决定:是时候把文档内容调整到当代Windows平台上了。我对当代Windows的定义是NT 4.0 SP4及其直系衍生版本:Windows 2000、Windows XP、Windows Server 200X、Windows Vista、Windows 7。文中每当我提及当代Windows,即是指我所说的上述系统。
为什么要特地关注NT 4.0?因为这是第一个既非基于DOS,又包含Winsock当前版本(v
Windows 98也支持Winsock 2,Windows 95也可安装Winsock 2插件,尽管这两款操作系统与NT4 SP4相比有些不同和限制。针对这两款以及更早系统的历史遗留信息,有一篇历史文章来单独陈述,同时也回答了一个问题:为什么Winsock当前这个版本的规范能够保持12年之久。这篇文章饱含历史价值。
本文档的大部分内容仍适用于Winsock 1.1和BSD Sockets,只是因为大部分API都是向后兼容的。后文中我将就如何在各种API中选择给出建议。此外,本文档中有一篇文章涉及其它操作系统下Winsock的替代品。
本文档并没有深入涉及Windows CE(或者Pocket PC、Windows Mobile、Windows Phone,或者今年他们给这玩意儿起的什么名字)。我最近一次研究这些,当时WinCE 4还是最新版本,Winsock在那上面的实现是相当的弱,因此本文档也涉及一些针对缺失特性的变通方案。我也不知道新版本嵌入式系统在这方面是不是跟那些桌面系统相近一些了。
本文档适用的前提是您用的开发工具版本足以支持Winsock。不需要单独下载Winsock SDK进行开发,这样的情况已经持续多年了。如果您用的开发工具确实太老了,没有winsock.h之类的东西,您可以尝试下载安装Windows平台SDK,包括微软Winsock SDK,最好与Visual C++联合使用。您应该尽可能升级您的开发工具。微软已经完全免费发布Visual Studio组件的可用版本好几年了,您需要使用Visual C++ Express进行Winsock编程。微软已经声明他们将持续提供这款软件,所以别担心它有一天会消亡。它会消亡,但是我觉得它消亡的时间不会比其直接竞争对手(如MinGW、Cygwin)更早。
说到这里,需要说明的是本文档中的代码应该是能用MinGW和Cygwin下的GCC版本进行构建的。代码的测试主要是在Visual C++的当前版本下进行的,但是我们也尽可能保证了兼容性。然而,你必须自己写构建命令。
0.8 推荐使用的编程语言
本文档优先面向C语言同时也有一些C++语言。我之所以不使用其他语言,主要有以下几个原因:
1. C语言是Windows编程的通用语言。用其它语言写Windows程序可能更流行,但Windows的底层还是基于C的。
2. Winsock API是从Unix的BSD Sockets API派生而来的,而Unix是以C为核心的。
3. 我所知道的Windows支持的每一种C以外的主流语言都已经具备面向自己的网络编程方式。您无需在使用这些语言时调用Winsock API,尽管以前您曾经做过这种糟糕的事情。
本文档中没有涉及仅仅影响某种语言(比如Visual
Basic)的问题。第5部分“资源”和第2部分的问题条目“在各种我偏爱的语言里能使用Winsock吗?”也许有些用处。
0.9 推荐使用的协议
本文档目前只涉及TCP/IP传输协议集,只是因为我从没编过其它传输协议的程序。Winsock支持多种其它的传输协议,然而我除不能帮您找到相关信息,除了告诉您去哪里提问。
0.10 致谢
FAQ绝不是一个独立的东西,很多人参与其中,上至耐心并愿意分享知识的大师,下至诸多一次次发表相同的讨厌问题的无知新手。没有大师,就没有准确答案;没有新手,就没有内容可写。没有每个人从新手逐步地成长,FAQ就失去了意义。
第一份帮助我的文档,就是上文提及的Mark Towfiq最开始写的FAQ。尽管这份原始材料的内容没有多少被保留下来,它还是为本文档提供了原始、核心的东西。起初我并没想好要创建一份FAQ文档,可能是已有的那份文档日益落伍才刺激了我。
Bob Quinn(因著《Windows Sockets网络编程》而闻名)一直以来为我纠错,并鼓励我编写了现在的文档中相当一部分问题
Philippe Jounin通过不同的视角做出了不可估量的贡献。他的新鲜的观点矫正了文档中几处狭隘的思路。
Alun Jones反复指出了我的各种缺点(这一点我非常感激,真的)。不管怎样,他的直言提高了本文档中信息的质量
自2000年起,本文档开始收集来自全球Winsock程序员的文章、代码和问题条目。这些人们把他们出色的工作成果交给我管理,我要对他们表示感谢。(这些条目标注了原作者的名字。)
当然,另外还有很多人通过邮件给我发送代码段、纠错意见、建议、指导以及各种优秀内容。谢谢你们!
posted on 2011-09-03 23:50 Programmer K 阅读(500) 评论(0) 收藏 举报
浙公网安备 33010602011771号