DELPHI下的Winsock编程(一)--从TClientSocket控件出发

本文旨在介绍DELPHI下使用TClientSocket和TServerSocket进行Winsock编程的基础知识,通过实例展示如何创建简单的客户端和服务器通信程序。强调了解Winsock API的重要性,以避免仅依赖组件而忽视底层原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,写几句简单的代码如下:

{
    作者:wudi_1982
    联系方式:wudi_1982@hotmail.com
    转载请著名出处
}

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, StdCtrls, ScktComp;

type
  TForm1 
=   class (TForm)
    ServerSocket1: TServerSocket;
    Memo1: TMemo;
    Button1: TButton;
    StatusBar1: TStatusBar;
    Memo2: TMemo;
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值