1、第十章 Internet编程,10.1 基本概念 10.2 Socket编程 10.3 制作浏览器习 题,10.1 基本概念,10.1.1 计算机网络、Internet和Intranet1计算机网络 (1) 定义 计算机网络是利用通信手段,把地理上分散的、能够以相互共享资源(包括硬件、软件和数据等)的方式有机地连接起来的、而各自又具备独立功能的计算机系统的集合。(2) 主要功能数据通信 资源共享 实现分布式的信息处理 提高计算机系统的可靠性和可用性,10.1 基本概念,2InternetInternet的全称是Inter Network,译为“因特网”,也称为国际互联网,简称为互联网。因特网是
2、一个把全世界范围内的众多计算机、人、数据库、软件和文件连接在一起的、通过一个共同的通信协议(TCP/IP协议)相互会话的网络。 它能提供的服务主要有: 电子邮件(E-mail) WWW(World Wide Web)服务 文件传输服务(FTP) 远程登录(Telnet) 布告栏服务(BBS),10.1 基本概念,3. IntranetIntranet称为企业内部网,它是基于TCP/IP协议,使用环球网WWW工具、采用防止外界侵入的安全措施、为企业内部服务,并有Internet功能的企业内部网络。Intranet是一种使用Internet技术和标准组建的企业内部计算机网络,它可以与Interne
3、t互连,也可以不与Internet互连。 Intranet上的信息分为两类:企业内部信息和向社会公开的大众信息;企业内部信息不允许任何外部用户访问的信息,它主要用于企业内部的信息共享和协同工作。Intranet根据企业安全要求,设置防火墙、安全代理等,用以保护企业内部信息,防止外界侵入。,10.1 基本概念,10.1.2 HTML超文本标记语言HTML(Hyper Text Markup Language)是制作Web信息的语言,是设计制作页面的基础。 作为一种标记语言而不是编程语言,HTML主要用来创建与系统平台无关的文档。所以按照HTML语法规则建立的文档可以运行于不同硬件和操作系统平台上
4、。,10.1 基本概念,HTML文档的总体框架为: 头部元素、元素属性及内容 正文元素、元素属性及内容,10.1 基本概念,10.1.3 TCP/IP协议、HTTP协议为共享计算机网络的资源,在网上交换信息,需要实现不同系统中的实体间的通信。实体包括用户应用程序、文件包传送、数据库管理系统、电子邮件设备及终端等。计算机之间的数据通信必须遵守某种约定和规程,这些约定和规程就是网络通信协议。Internet使用的通信协议是TCP/IP。超文本传输协议HTTP位于TCP/IP协议的顶层,是专门为传输HTML页面设计的一种网络协议,即HTTP是HTML的基本协议,浏览器和服务器使用HTTP传输HTML
5、文档。,10.1 基本概念,1TCP/IP协议 OSI(开放系统互联)是ISO制定的网络系统框架结构,是一切网络互联的基础模型。OSI参考模型把整个网络的通信功能划分为7个层次,每个层次完成各自的功能,通过各层间的接口和功能的组合与其相邻层连接,从而实现不同系统之间、不同结点之间的信息传输。表10-1是OSI参考模型中7个层次的名称和它们的主要功能。,10.1 基本概念,表10-1 OSI参考模型中的7个层次,10.1 基本概念,TCP/IP拥有一套完整而系统的协议标准,它采用信息打包的方法来简化各种不同类型的计算机之间的通信传输。互联网中使用的协议对标准的OSI七层协议进行了简化,它没有表示
6、层和会话层,这两层的功能由应用层提供。TCP/IP一般分为4层,其功能见表10-2所示,它的体系结构如图10-1所示。,10.1 基本概念,图10-1 TCP/IP协议的体系结构,10.1 基本概念,2HTTP协议超文本传输协议HTTP属于应用层协议,位于TCP/IP协议的顶层,在设计和使用HTTP协议时需要以TCP/IP协议中的其他协议为基础。例如,它要通过DNS进行域名解析,要建立TCP连接才能进行HTML文档传输。,10.1 基本概念,表10-2 TCP/IP各层的主要功能,10.1 基本概念,10.1.4 线程1线程的概念线程是Win32进程中的最小执行单元,线程由一个堆栈、CPU寄存
7、器的状态和系统调度列表中的一个入口组成,每个线程都可以访问进程中的所有资源。 线程与进程的差别主要体现在两个方面:(1) 线程和进程虽然都是系统的基本执行单元,线程的划分单位比进程小,因此支持多线程的系统比只支持多进程的系统并发度高。(2) 进程将内存作为自己独享的资源,每个进程都有自己的内存空间;而线程共享内存空间,并通过共享内存交换信息,因此有利于提高系统效率。,10.1 基本概念,2TThread类 (1) TThread类TThread类是直接从Tobject继承下来的,它是抽象类,即不能创建TThread类的实例,而只能创建TThread派生类的实例,即创建线程对象。 (2) 与VC
8、L同步大多数VCL都要求在任一时刻只允许一个线程访问它,因此在Delphi中使用多线程,还有1个重要的注意事项,即对VCL访问只能在主线程中进行,这表明所有与用户交互的代码只能在主线程中。同时,Delphi为了使线程中的方法也能在主线程中执行,在TThread中设置了1个Synchronize()方法,该方法声明如下:,10.1 基本概念,procedure Synchronize(Method:TThreadMethod);Synchronize()方法的参数就是用来传递需要在主线程执行的线程中的方法。例如若 TestThread线程对象中有名为PutResult()的方法需在主线程中执行,
9、则在TestThread的 Execute()方法中加入Synchronize(PutResult)语句即可。,10.1 基本概念,3线程的终止当线程对象的Execute()方法执行完毕后,就认为该线程终止了,此时Delphi会自动调用一个标准例程EndThread(),该例程将再调用API函数ExitThread(),由ExitThread()来清除线程所占用的栈。另外,虽然进程结束时将自动清除所有的线程对象,但线程对象不再使用时,最好在应用程序中及时清除,这样可以提高内存使用效率。线程终止时,将触发OnTerminate事件,所以可以利用在退出Execute()之前将FreeOnTermi
10、nate属性置为true的方法来及时清除线程对象。,10.1 基本概念,4线程同步编写多线程应用程序时,需要控制好线程间的同步资源访问,以保证线程的安全运行。 所谓线程同步,简单说就是协调线程间的执行时序。Win32 API提供了1组同步对象,包括信号量、互斥、临界区和事件等,来解决线程的同步问题。Delphi分别将事件对象和临界区对象封装为TEvent和TCriticalSection对象,使得事件和临界区更易使用。但如果要在Delphi程序中使用信号量和互斥等对象,还必须借助于复杂的Win32 API函数。,10.2 Socket编程,Socket(套接字)是在UNIX系统上提出来的,一开
11、始主要是用于本地通信,但很快就应用到C/S体系上。Microsoft公司在此基础上创建了Winsock组件,专门用于Windows接口,与Socket完全兼容。Winsock组件对用户来说是不可见的,它提供了访问TCP和UDP网络服务的方便途径。Delphi、Visual Basic、Visual C+等的开发人员都可使用它。为编写客户或服务器应用程序,不必了解TCP的细节或调用低级的Winsock API,通过设置组件的属性并调用其方法就可轻易连接到一台远程机器上,并且还可双向交换数据。下面先介绍利用Socket进行编程的基本知识。,10.2 Socket编程,10.2.1 工作原理 套接字
12、Socket 接口是TCP/IP网络的API。套接字接口定义了多个函数和例程,程序员可以使用这些函数和例程开发TCP/IP的应用程序。在使用Socket组件时,首先需要考虑使用什么协议,可以使用的协议包括TCP和UDP。两种协议之间的重要区别在于它们的连接状态:TCP协议是有连接的协议,在开始数据传输之前,用户必须先建立连接;UDP协议是一种无连接协议,数据传输时,两台计算机之间没有明确的连接。,10.2 Socket编程,1TTcpClient组件TTcpClient组件的主要属性如下:(1) Active属性:该属性表示组件是否处于激活状态。(2) BlockMode属性:该属性设置或返回
13、阻塞模式。(3) RemoteHost属性:该属性用来指定远程计算机的IP地址。(4) RemotePort属性:该属性用来指定远程计算机的端口。,10.2 Socket编程,2TTcpServer组件TTcpServer组件的主要属性:(1) LocalHost属性:该属性用来指定客户端计算机的IP地址。(2) LocalPort属性:该属性用来指定客户端计算机端口。这两个属性与TTcpClient组件的RemoteHost属性和RemotePort属性的值相对应。TTcpServer组件的属性、方法和事件与TTcpClient组件的都很相似,,10.2 Socket编程,10.2.2 建立
14、客户端Socket 1组件属性设置在Form中添加一个TTcpClient组件,应用程序就变成了一个TCP/IP客户端。TTcpClient组件的RemoteHost属性用于指定服务器的主机名,如http:/,或者指定主机的IP地址,如202.197.9.38,这两种方式是等价的。要连接服务器,还要指定服务器端所使用的端口号。设置RemotePort属性来指定端口号。,10.2 Socket编程,2建立连接指定了服务器端的主机名或IP地址以及端口号后,只要调用TTcpClient组件的Open方法或者把Active属性设为true,客户端Socket就会向服务器端Socket提出连接请求。如果
15、服务器端Socket正好处于监听状态,就会自动接受请求并建立连接。,10.2 Socket编程,3 数据传输一旦服务器端接受了客户端的连接请求,客户端就可以向服务器端发送数据。这时客户端与服务器端之间就拥有了一个Socket,通过此Socket,双方实现通信。所以Socket属性很重要,它又拥有很多的方法,用其中的几个简单方法,就可以实现数据的发送与接收。客户端用SendTo方法来实现数据传输。,10.2 Socket编程,4断开连接在客户端断开连接很简单,只要调用TTcpClient组件的Close方法或Disconnect方法。,10.2 Socket编程,10.2.3 建立服务器端Soc
16、ket 1组件属性设置把一个TTcpServer组件放到From上,应用程序就变成了一个TCP/IP服务器端。 2建立连接指定了客户端的端口号后,就可以调用TTcpServer组件的Open方法开始监听。如果在设计期把Active属性设为true,服务器端程序启动的时候就会自动进入监听状态。也就是说,把Active属性设为true与调用Open是等价的。,10.2 Socket编程,3数据传输在服务器端接受数据,可以利用TTcpServer组件的ReceiveFrom方法。4断开连接如果要断开连接,只要在服务器端用Close或者把Active属性设为false。但是这将导致所有对客户的连接都断
17、开,并退出监听状态。如果在客户端用Close,将只断开该客户与服务器的连接,不影响其他客户的连接。,10.2 Socket编程,【例10-1】设计一个程序要求具有以下功能:服务器在端口3000上接收客户连接,连接建立后,每个客户都以一个单独的线程执行服务器与客户端的数据传送。,10.2 Socket编程,服务器部分主要程序代码procedure TfrmSvr.TcpServer1Accept(Sender: TObject;ClientSocket: TCustomIpClient);vars:string;DataThread:TClientDataThread;begin DataThr
18、ead:=TClientDataThread.Create(true); /生成线程对象 DataThread.TargetList:=memo1.Lines; DataThread.ListBuffer.Add(*接受连接*); DataThread.ListBuffer.Add(客户端主机+ ClientSocket.LookupHostName(ClientSocket.RemoteHost)+ (+ClientSocket.RemoteHost+),发来消息:);,10.2 Socket编程,服务器部分主要程序代码(续)s:=ClientSocket.Receiveln while s
19、 do begin DataThread.ListBuffer.Add(s); s:=ClientSocket.Receiveln ; end; DataThread.ListBuffer.Add(*消息结束*); DataThread.Resume;end;,10.2 Socket编程,客户端程序代码procedure TfrmClient.Button1Click(Sender: TObject);var i:integer;begin try if TcpClient1.connect then for i:=0 tO Memo1.Lines.Count-1 do TcpClient1.
20、sendln(memo1.Linesi); finally TcpClient1.disconnect;end;end;,10.3 制作浏览器,首先介绍一下浏览器的工作原理。Web应用包括Web服务器和Web客户端两部分,Web客户端就是通常所说的Web浏览器。每次用户要浏览一个网页,客户端的浏览器都要向服务器发出请求,服务器端接收到请求后响应请求,发送相应的网页到客户端的浏览器。在整个过程中,服务器和客户的通信都是基于HTTP协议,客户端收到的网页也是用HTTP脚本语言书写的,所以客户端还要对收到的网页进行解读,才能使网页正常显示给用户。,10.3 制作浏览器,浏览器的主要功能如下:发送浏览
21、网页的请求。接收服务器发来的网页数据。解读接收到的网页数据,将其显示给用户,10.3 制作浏览器,10.3.1 TWebBrowse组件 1用途TWebBrowser组件位于组件面板上的Internet选项卡上,如图10-3所示,提供了进行Web访问的功能,利用它可以通过简单的编程实现Web资源的访问。2主要属性 Busy属性功能 LocationName属性 LocationURL属性 Offline属性,10.3 制作浏览器,10.3.2 界面设计 新建一个工程PrjWeb.dpr。在默认窗体上按图10-7所示设计界面。窗体及其组件的属性设置值如表10-8所示,菜单如图10-8、10-9、
22、10-10所示。,10.3 制作浏览器,图10-7 WebBrowse界面设计,10.3 制作浏览器,10.3.3 代码编写 (1) 给窗体定义Public函数GotoPage,在程序的Public处添加下面的代码:procedure GotoPage(ReqURL:string) ;(*在程序中实现该函数,见下面的代码*)procedure TFMain.GotoPage(ReqURL:string);beginWebBrowser1.Navigate(ReqUrl);end;,10.3 制作浏览器,(2) 给前进按钮添加如下代码:procedure TFMain.Button1Click(
23、Sender: TObject);beginGotoPage(comboBox1.text);end;,10.3 制作浏览器,(3) 在ComboBox1输入或者选择网址后,按一下回车键即可打开该网页。可以通过处理ComboBox1组件的OnKeyPress事件来实现,代码如下:procedure TFMain.ComboBox1KeyPress(Sender: TObject; var Key: Char);beginif Key = #13 then GotoPage(ComboBox1.Text);end;,10.3 制作浏览器,(4) 处理WebBrowserl的OnDownloadB
24、egin和OnDownloadComplete事件,以显示一些状态信息,代码如下:procedure TFMain.WebBrowser1DownloadBegin(Sender: TObject);beginStatusBar1.Panels0.text:=Downloading+WebBrowser1.LocationURL+.;end;procedure TFMain.WebBrowser1DownloadComplete(Sender: TObject);var NewUrl:string;begin StatusBar1.Panels0.Text:=Done; NewUrl:=Web
25、Browser1.LocationURL; IF (NewUrl) and(ComboBox1.Items.IndexOf(NewUrl)0) then ComboBox1.Items.Add(NewUrl);.end;,10.3 制作浏览器,(5) 处理WebBrowserl的OnTitleChange事件,以在程序的标题栏中显示网页的标题信息,代码如下:procedure TFMain.WebBrowser1TitleChange(Sender: TObject; const Text: WideString);begincaption:=Text;end;(6) 程序启动时显示默认页面,
26、代码如下:procedure TFMain.FormCreate(Sender: TObject);beginGotoPage(ExtractFilePath(Application.ExeName)+Default.htm);end;,10.3 制作浏览器,10.3.4 程序运行结果 运行程序,在地址栏中输入,如果你的网络能正常访问Internet,就会在WebBrowser1中显示的内容。回车或者单击前进按钮,即可依次显示如图10-10所示的页面。,10.3 制作浏览器,图10-10 程序运行效果,习 题,1什么是计算机网络?2Internet与Intranet有何异同?各有哪些功能?3T
27、CP/IP协议与HTTP协议有何联系与区别?简述其工作原理。4什么是线程,线程与进程有哪些区别?5用TTcpClient组件和TTcpServer组件开发基于TCP协议的数据传输程序时,主要用到它们的哪些属性、方法和事件?6浏览器的主要功能有哪些?利用TWebBrowse组件开发一个简单的网页浏览器,实现主要的功能。,学习动物精神,11、机智应变的猴子:工作的流程有时往往是一成不变的,新人的优势在于不了解既有的做法,而能创造出新的创意与点子。一味 地接受工作的交付, 只能学到工作方法 的皮毛,能思考应 变的人,才会学到 方法的精髓。,学习动物精神,12、善解人意的海豚:常常问自己:我是主管该怎么办才能有助于更好的处理事情的方法。在工作上善解人意, 会减轻主管、共 事者的负担,也 让你更具人缘。,谢谢大家!,学习动物精神,11、机智应变的猴子:工作的流程有时往往是一成不变的,新人的优势在于不了解既有的做法,而能创造出新的创意与点子。一味 地接受工作的交付, 只能学到工作方法 的皮毛,能思考应 变的人,才会学到 方法的精髓。,学习动物精神,12、善解人意的海豚:常常问自己:我是主管该怎么办才能有助于更好的处理事情的方法。在工作上善解人意, 会减轻主管、共 事者的负担,也 让你更具人缘。,谢谢大家!,