您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Delphi的Socket编程详解
Delphi的Socket编程详解ClientSocket和ServerSocket几个重要的属性:1.client和server都有port属性,需要一致才能互相通信2.client有Address属性,使用时填写对方(server)的IP地址几个重要的事件:client:OnRead事件,当client收到消息时在OnRead事件中可以获得server发送过来消息。Server:OnClientRead事件,与上述client的作用相同发送信息:clien使用SocketClient1.Socket.SendBuf(char类型的数组,信息长度);server使用SocketServer1.Socket.Connection[0].SendBuf(char类型的数组,信息长度);接收信息clien使用SocketClient1.Socket.ReceiveBuf(char类型的数组,信息长度);server使用SocketServer1.Socket.Connection[0].ReceiveBuf(char类型的数组,信息长度);使用sockets:Socket控件让你建立一个利用TCP/IP和有关的协议与其他系统进行通信的应用。使用Sockets,你能够读和写通过它连接的其他机器,而不用担心实际的网络软件的相关细节。Sockets提供基于TCP/IP协议的连接。Delphi提供通过网络服务器或客户应用程序去读和写其他的系统的功能。一个服务或客户程序通常专注于一个单一的服务,如超文本传送协议(HTTP)或文件传输协议(FTP)。使用serversockets,一个应用程序可以通过这些服务中的一个去连接一个希望使用服务的客户程序。Clientsockets允许一个应用使用这些服务中的一个去连接提供这个服务的服务应用。使用sockets去写应用程序,你必须理解下面这些知识:一、服务工具当你需要写网络服务或客户应用时,Sockets提供一种接合。对于许多服务,象HTTP或FTP,第三方服务商提供这些服务已经相当有效。有些甚至随着操作系统捆绑而来,以便不用你自己写。然而,当你想更多的控制服务的实现,比如想让你的应用程序与网络通信更加紧密,或当没有一个服务能提供你特殊需要的服务时,你可能想建立你自己的服务或客户应用。例如,工作在分布式datasets时,你可能想为数据库写一层与其他系统通信的应用。想使用Sockets实现一个服务,你必须理解:1.服务协议在你写一个网络服务或客户程序前,你必须明白你的应用将提供或使用什么服务。你的网络应用必须支持许多服务的标准协议。如果你为标准的服务例如HTTP,FTP写网络应用,你必须先理解与其他系统通信所使用的协议。特殊服务细节你必须看提供的或使用的文档。如果你的应用程序提供一个新的服务与其他系统通信,第一步是为这个服务的服务端和客户端设计通信协议。什么信息将发送?如何整理这些信息?如何对这些信息进行编码?应用程序通信经常的,你的网络服务端或客户端应用程序要提供一层在网络软件和一个应用之间使用的服务。例如,一个HTTP服务站点在internet与一个Web服务应用之间为HTTP请求信息提供内容和应答。在你的网络应用(或客户应用)和网络软件之间Sockets提供一个接口。你必须提供一个接口,在你的应用程序与应用间使用。你可以拷贝第三方服务商提供的标准API(例如ISAPI),或你可以设计和发布你自己的API.2.理解服务和端口许多标准服务都有关联的、指定的端口号。当执行服务时,你可以为服务考虑一个端口号。如果你实现一个标准服务,Windowssocketobjects提供一些方法让你为服务寻找端口号。如果提供一个新的服务,在基于Windows95或NT机器上,你能够在文件Services中为你的服务指定一个相关联的端口号。设置Services文件的更多信息请看微软的WindowsSockets文档。二、Socket连接的类型Socket连接可以分成三个基本的类型,它们反映了如何开始连接和本地Socket连接是什么。这三个类型是:1.客户端连接客户端连接是一个本地系统的客户端socket与一个远程系统上的服务端Socket连接。客户端连接由客户端Socket开始。首先,客户端Socket必须描述它想连接到的服务端Socket.接着客户端socket查找服务端socket,当找到服务器时,就要求连接。服务端socket可能不能完成正确的连接。服务器sockets维持一个客户端请求队列,在他们有时间时完成连接。当服务端socket接受客户端连接,服务端socket将向它想连接的客户socket发送一个完整的描述,客户端的连接完成。2.监听连接服务器socket不会主动去定位客户端,他们形成被动的半连接状态,监听来自客户端的请求。服务器sockets形成一个队列,存放它们听到的连接请求。这个队列记录着客户端连接请求,就象他们已连接进来一样。当服务器sockets同意客户端连接请求时,它将形成一个新的socket去连接客户端,因此这个监听连接能保持开放状态允许其他客户端的连接请求。3.服务端连接当监听socket同意一个客户端请求时,服务器端socket形成一个服务器连接。当服务器端同意连接时,向客户端发送一个服务端socket描述以完成连接,当客户端socket收到这个描述时这个连接得到确认,连接完成。一但连接到客户端的Socket完成,服务端连接就不能识别从一个客户端来的连接。末端双方有同样的能力去接收同样的事件类型。只有监听(listening)连接是根本不同的,它只有一个单一的末端。三、sockets描述Sockets让你的网络应用软件通过网络与其他系统进行通信。在网络连接中每个socket可以看成一个终端点。它有一个指定的地址。*这个系统正在运行*它理解的接口类型*用来连接的端口一个完整的socket连接描述,你必须提供sockets在连接两端的地址。在你开始一个socket连接前,你必须完整的描述你想得到的连接。有些信息可以从你的应用软件运行的系统平台上得到。例如,你不需要描述一个客户端socket的本地IP地址--这个信息可以从操作系统上获得。你必须提供你工作所依靠的socket的类型的信息。客户端socket必须描述他们想连接的服务器。监听服务器sockets必须描述他们提供反应的服务器的端口。一个socket连接终端的完整描述包括两部分:1.IP地址主机是这样一个系统,它运行着包含有socket的应用程序。你必须描述主机给socket,通过给出主机的IP地址来完成这个描述。IP地址是一个有四个数字(byte)值的,在internet上使用的标准点分十进制字符串。例如:123.197.1.2一个简单的系统可以支持多于一个的IP地址。IP地址通常难于记忆并且容易打错。一个可供选择的方法是使用主机名。主机名就是IP地址的别名,它就是你常看到的统一资源定位符(URL)。它是一个字符串,包括了协议、服务和域名。例如地址。在windows95和NT机器上,如果一个主机名不能用,你可以在HOSTS文件中为你的本地IP地址(这个本地IP地址应该是指你想连接的主机IP地址)建立一个进入的名字。关于HOSTS文件的更多信息请看WINDOWSSOCKETS的文档。服务器sockets不需要指定主机。本地IP地址可以从系统中读到。如果本地系统支持多于一个的IP地址,服务器sockets将同时在所有的IP地址上监听客户端请求。当一个服务器socket同意一个连接,客户端提供一个远程IP地址。客户端sockets必须通过提供主机名或者IP地址来指定远程主机。在主机名和IP地址间作一个选择许多应用软件使用一个主机名去指定一个系统。主机名容易记住并且容易检查错误。进一步讲,服务器能改变系统或与IP地址关联的特殊的主机名。使用一个主机名,能够允许客户端通过主机名描述找到抽象的站点,即使主机使用一个新的IP地址。如果主机名是未知的,客户端socket必须指定服务器系统使用的IP地址。通过给一个IP地址来指定服务器将更快。当你提供主机名时,socket在定位服务器系统前,必须搜寻与这个主机名相关的IP地址。2.端口号虽然IP地址提供了足够的信息去找到socket连接中位于另一端的系统,但你还必需要为Socket连接指定一个端口号。没有端口号,一个系统在同一时间只能进行一个单一的连接。端口号是允许一个独立系统同时支持多个主机连接的唯一标识,每个连接都必须指定一个端口号。在网络应用中,对于服务器工具来说端口号是一个数字代码。有一个习惯就是监听服务连接到他们自己固定的端口号上,以便他们能找到客户端sockets.服务器socket监听为他们提供服务的相关端口号。当他们允许给予一个客户端socket连接时,他们创建一个独立的socket连接,使用不同的专用的端口号。通过这个方法,能持续的监听相关服务的端口号。客户端socket使用一个专用的本地端口号,就不用其他的socket去寻找它们。他们指定他们想连接的服务器端socket的端口号,这样他们就能找到服务器应用程序。常常的,这个端口号是通过命名想连接的服务来间接指定的。四、使用socket控件Delphi提供两个socket控件,客户端sockets和服务器sockets.他们允许你的网络应用构成连接其他的机器和允许你通过这个连接来读写信息。与每个socket控件相关联的是windowssocket对象,它们在终端的的作用是一个实际的socket连接。socket控件使用windowssocket对象去封装windowssocketAPI调用,所以你的应用不用去关心连接建立的细节或管理socket信息。如果你想利用windowssocketAPI调用或自定义连接细节,socket控件提供了便利,你可以使用windowssocket对象的properies,events和方法。1.使用客户端sockets添加一个客户端socket控件(TClientSocket)到你的form或datamodule使你的应用成为一个TCP/IP客户。客户端sockets允许你指定你想连接的服务器socket和你希望服务器提供的服务。一但你描述你想得到的连接,你可以使用客户端socket控件去完成连接服务。每个客户端socket控件使用独立的客户端windowssocket对象(TClientWinSocket)去应答连接中的客户终端。使用客户端sockets去:A.指定想得到的服务客户端socket控件有一个数字properties,允许你指定想连接的服务器系统和端口。你可以通过主机名来指定服务器系统,使用Hostproperty。如果你不知道主机名,或者你关心找到服务器的速度,你可以指定服务器系统的IP地址,通过使用Addressproperty。你必须指定IP地址或主机名中的一个。如果你两个都指定,客户端socket控件将使用主机名。除服务器系统外,你必须指定你的客户端socket将连接的在服务器系统上的端口。你能够直接使用Portproperty来指定服务端口号。或者直接在Serviceproperty使用想得到的服务的名字。如果你指定端口号和服务名,客户socket控件将使用服务名。B.建立连接一旦你在客户socket控件中完成了设置描述你想连接的服务器的属性,你就可以进行连接,通过调用Open方法。如果你想你的应用启动时自动建立连接,在设计时设置Activeproperty为true,通过使用ObjectInspector来设置。C.取得关于连接的信息完成连接到服务器socket后,你可以使用你的客户socket控件相关的客户windowssocketobject去取得关于连接的信息。使用Socketproperty去访问clientwindowssocketobje
本文标题:Delphi的Socket编程详解
链接地址:https://www.777doc.com/doc-2909794 .html