Delphi4的Winsocket编程

原创 2001年07月30日 19:27:00
Delphi4的Winsocket编程
  也许你曾经叹服过微软公司的IE浏览器等网络应用软件功能之强大,技术之先进,也许你目前还没有能力开发这样的一个复杂的大型系统,不过不用着急,这里可以给你一个练习的机会,就是学会用Delphi的Winsocket来编写基于TCP/IP的应用程序,这里假设你已经对Delphi开发工具已经初步熟悉了。

  我们可以想象,如果从最原始开始来编写一段实现与远程计算机通信的程序,则必须对相关的网络协议、系统的底层知识以及网络软硬件技术有一个全面的熟悉和掌握,然而这在短时间内对大多数人来讲,都不是一件容易的事。

  幸运的是Delphi的网络组件库中为我们提供了关于实现网络通信的组件,它们封装了复杂的具体实现的细节。其中ClientSocket和ServerSocket组件使我们能够很方便地编写出自己的网络通信和资源共享程序。

  Delphi 4.0中编写Winsocket程序的步骤分为:

  1)Winsocket组件属性设置;

  2)建立与远程计算机的连接;

  3)计算机间的数据传输;

  下面具体就这三个步骤做详细说明。

  一.Winsocket属性的设置

  Delphi 4.0中将Winsocket细分为两种组件:ClientSocket和ServerSocket。它们分别作为客户端和服务器端的组件。即在客户端程序中采用ClientSocket组件,而在服务器端则采用ServerSocket组件。通过这两种组件之间的通信,再加上辅助的应用程序代码,就可以实现一个简单的通信程序。当然在客户端程序中再引入ServerSocket的话,那么客户端程序就可以充当服务器了,可以对其他的客户端程序的请求进行响应。

  如果正在编写服务器端程序,就必须设置ServerSocket组件的Port属性。之所以要设置此参数,是因为在同一台计算机上可能运行着多个服务器程序,而它们可能总在不停地接受来自于远程客户端程序的连接请求。如果你正试图发送一份电子邮件,而系统却将你的请求连接到了另外一个服务器程序上了,则你的邮件就肯定无法正常发送出去了。所以必须给服务器程序上的ServerSocket组件设置一个合适的端口号Port。也可以设置Service属性,它指示了ServerSocket所提供的服务类型,比如:FTP、HTTP等等。然后设置Active属性为True。

  如果正在编写客户端程序,则设置ClientServer组件的属性就多一些。Port属性应设置成和服务器端的Port属性值一致。另外Host的属性必须正确设置,它是一个只读属性,在设计时不可用。它指示了客户程序所要连接的远程服务器的主机名。也可以设置Address属性,也就是远程主机的IP地址。如果这两个属性都设置了的话,那么系统将采用Host属性,而Address属性设置的IP地址就变成无效了。

  二.建立与远程计算机的连接

  要在远程计算机系统之间进行数据传输,首先必须在通信的两台主机之间建立连接。

  服务器端的ServerSocket组件调用Open方法初始化Socket连接,同时也就设置了Active属性为True,将ServerSocket组件设置成侦听模式,随时侦测是否有连接请求。

  如果服务器接受了客户程序的连接请求,则触发OnAccept事件,如下代码就是处理接受连接后服务器程序所要做的工作。

  procedure Myform..ServerSocketAccept(Sender: TObject,Socket: TCustomWinSocket);

  begin

  IsServer := True;

  end;

  在客户端程序中,ClientSocket组件则设置Port、Host等必须的属性,然后设置Active属性为True,提出连接请求。

  三.计算机之间的数据传输

  一旦服务器端接受了客户机方面的连接请求,客户机就可以发送数据。这时,在客户机和服务器之间就拥有了一个Socket,通过此Socket双方实现通信。所以Socket属性很重要,它又拥有很多的方法,用其中的几个简单的方法,就可以实现数据的发送和接收。

  客户机端用如下形式:ClientSocket1.socket.sendtext('string you want to send');

  在服务器端采用如下形式:ServerSocket1.socket.recievetext( str: string);此函数返回接受到的字符串的长度,将字符串存储在变量str中。

  上述是数据传输的最简单的例子,你还可以采用Socket属性所提供的其他方法来实现复杂的数据传输。

  虽然Delphi 4.0中使用Winsocket组件十分方便,但是要真正熟练运用它来实现网络应用程序的开发,则必须仔细阅读关于它的帮助文件和示例程序。在不断的学习中比较这种方法的优点,掌握其编程特点,进而掌握Delphi中所提供的其它网络组件,例如:NMPOP3、NMUDP、NMFTP等的编程技巧。到那时,你就会有能力参与真正意义上的网络应用程序的开发,而不是停留在拿来别人的网络应用软件,设置一番、会熟练操作的水平上。



Winsocket编程一般步骤-服务端编程

Socket编程是网络编程的重要组成部分,编写简单的服务端程的程序的一般的步骤如下 第一步:包含WinSocket的头文件和动态链接库(DLL) #include #include #pragm...
  • u010667082
  • u010667082
  • 2015年06月22日 22:02
  • 272

winsocket编程

winsocket编程
  • L_serein
  • L_serein
  • 2010年06月28日 22:38
  • 704

C/C++ socket编程教程之三:Windows下的socket程序

本节讲解 Windows 下 Socket ,学习 Linux Socket 的读者可以跳过。 服务器端代码 server.cpp: #include #include #pragma co...
  • Ctrl_qun
  • Ctrl_qun
  • 2016年09月06日 22:07
  • 2294

Winsocket编程

原始套接字是WINSOCK公开的一个套接字编程接口,它让我们可以在 IP 层对套接字进行编程,控制其行为,常见的应用有抓包 (Sniffer)、分析包、洪水攻击、ICMP ping等,但它不能截取包(...
  • qq_30549833
  • qq_30549833
  • 2015年12月10日 23:12
  • 233

WinSocket编程

ftp协议实现多线程断点续传 点对点多线程断点续传的实现 http://www.codeproject.com/Articles/412511/Simple-client-server-net...
  • daoxwj
  • daoxwj
  • 2013年04月22日 16:17
  • 971

WinSocket编程例子(TCP和UDP)

首先我们先来了解一下TCP和UDP的工作流程: TCP: TCP的工作流程图 UDP: UDP的工作流程图 我们用TCP来做一个例子实现服务器和客户端数据的交换。 server端: #i...
  • DaveBobo
  • DaveBobo
  • 2016年04月11日 20:46
  • 2656

WinSocket编程——原始套接字

原始套接字是WINSOCK公开的一个套接字编程接口,它让我们可以在 IP 层对套接字进行编程,控制其行为,常见的应用有抓包 (Sniffer)、分析包、洪水攻击、ICMP ping等,但它不能截取包(...
  • dylgsy
  • dylgsy
  • 2007年12月21日 12:00
  • 15421

MFC WinSocket编程

MFC WinSocket编程     MFC提供了两个高级类:CAsyncSocket和CSocket。     CAsyncSocket对winsocket API进行了一对一的包...
  • SUN_DRAGON
  • SUN_DRAGON
  • 2013年03月08日 14:23
  • 2048

win C++ Socket编程步骤

sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。 ...
  • lihongtao8209
  • lihongtao8209
  • 2014年05月10日 19:29
  • 292

win socket编程摘要

摘自:罗云彬的《Win32汇编教程》        最主要的两种是流套接字(stream socket)和数据报套接字(datagram socket)。流套接字使用传输层的TCP协议进行通信,所以...
  • spiderlily
  • spiderlily
  • 2013年11月04日 16:35
  • 1410
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi4的Winsocket编程
举报原因:
原因补充:

(最多只允许输入30个字)