DELPHI下的SOCK编程
本文是写给公司新来的程序员的,算是一点培训的教材。本文不会涉及太多的编程细节,只是简单讲解在DELPHI下进行Winsock编程最好了解的知识。
题外话:我认为学习编程就如同学习外语一样,最好的方式是你先学会如何去运用它,然后才是了解它的语言特性、语法之类的东西。不过很可惜,我们以前的外语教育使用了相反的过程。软件编程也是一样,在很多人的大学阶段,你更多的是学习那些理论知识,学习“语法”,这里,我丝毫没有贬低理论知识重要性的意思。理论知识和实践是相辅相成的,但一个恰当的学习方式,很多时候可以让学习者得到事半功倍的效果。例如你学习《数据结构》中排序的概念,我们假设对此概念你学习的非常出色,你脑子中有大量关于不同排序方法优劣的思想,你也自己琢摸出了很多奇妙的构思,但你没有丝毫编写代码的基本功,你所有一切的nice idea都只能停留在你的脑子中,你甚至不知道在实践运用中,这些idea是否可行,实践是检验真理的唯一标准。倘若你先具备了一些可以用于实践的基本技能,再去学习那些概念,我想,你可以很好的将”冒泡排序“实现出来,然后在这种实现和理论的结合中不断的前行。本文会从DELPHI7中的TServerSocket等组件出发,边用边学,直到API以及那些所谓的”思想“。
“当你相信并不理解的东西时,你就会受罪了。迷信不是办法”。--Stevice Wonder
RAD使得程序的编制更方便和快捷,即使没有经受专业的训练,依然可以写出完成一些功能的程序,在我现在的公司内部,有时候我会问公司的新员工,你为什么这样写,你的代码是怎么运行的?“不知道,反正可以运行。”我认为对于准备在Win32开发领域做下去的程序员来说,这是悲哀的。前面已经说了, 本文最终的目的不是简单的组件使用,而是让读者可以了解到Winsock的API以及DELPHI7中TServerSocket等VCL组件的编写。我始终认为对于一名合格的win32程序员来说,无论你使用什么工具编写代码,你都应该深入底层,起码你应该了解Win API,否则的话,在面对那些组件错误的时候,你只能莫名其妙的扣着脑袋,在编程的道路上,最多也只能成为一名熟练的”搬运工“。
阅读本文,你起码应该具备对Object Pascal的了解,如果能有一点UML的知识就更好了,因为文中会包含一些这方面的图形。
WINSOCK的基本概念
在Win32平台下进程网络编程,对于众多的基层网络协议,Winsock是访问它们的首选接口。而且在每个Win32平台上,Winsock都以不同的形式存在着。
要说明的是,Winsock是网络编程接口,而不是协议。它从Unix平台的Berkeley(BSD)套接字方案借鉴了许多东西,后者能访问多种网络协议。在Win32环境中,Winsock接口最终成为一个真正的“与协议无关”接口,尤其是在Winsock 2发布之后。
Winsock的API是建立在套接字基础上的。所谓套接字,就是一个指向传输提供者的句柄。Win32中,套接字不同于文件描述符,所以它是一个独立的类型—SOCKET。
第一个程序
在了解那些组件和API之前,我们先来使用一下。下面的程序非常的简单,只是一个在服务器和客户机之间建立连接并通讯的程序。
如果你已经使用TServerSocket以及TClientSocket做过客户端服务器的通讯程序,那么下面的内容你完全可以跳过。
我们使用TServerSocket组件来建立服务器端的程序。
它包含两个memo组件,用来分别处理接收到的数据和发送的数据,然后再在窗体上方一个TServerSocket组件,ServerType设置为stNonBlocking,Port设置为100,active设置为true,写几句简单的代码如下:






















