易语言“数据报、客户、服务器 ”
    易语言“数据报、客户、服务器 ”
━━━━━━━━━━━━━━━━━━━━━━━━━━这是三个典型的网络控件,写网络程序少不了它们。通过网络交互数据,首先要明白“连接”和“无连接”的概念。最简单的例子莫过于打电话和写信。两个人如果要通电话,得首先建立连接——即拨号,等待对方应答后才能相互传递信息,最后还要释放连接——即挂电话。写信就没有那么复杂了,地址姓名填好以后直接往邮筒一扔,收信人就能收到。用数据报控件进行数据交互,类似于写信,是基于“无连接”的;用客户、服务器进行数据交互,类似于打电话,是基于“连接”的。根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议(我们熟悉的OICQ就是采用这种协议);一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议。(这两种交互方式分别类似于生活中的写信和打电话。)在易语言中,用数据报控件封装了UDP协议,用客户控件和服务器控件封装了TCP协议。Ⅰ- 数据报
------------------------数据报是一种不可靠、小数据量的网络数据交互方式。如果传递的数据量过
web服务器又被称为大,有可能会失败,最好不要超过 127 字节。如需要大数据量或者可靠数据传送方式,请使用基于连接的其它网络组件(如客户、服务器)。虽然数据报控件传递的数据量小,又不够可靠,但它简单易用,在对数据量、可靠性没有特别要求的情况下,还是有它充分发挥作用的领域。最后我将用该控件做一个网络聊天程序(数据报版),作为例程。数据报的重要属性有:端口。数据报的重要方法有:发送数据()、取回数据()。数据报的重要事件有:数据到达。一、数据报的重要属性端口端口属性是一个整数型的值,默认值是19730。如果要改动,尽量取大于1024的较大值。端口是很重要的概念。首先需要明白的一点是,我们这里所说的端口,不是计算机硬件的I/O端口,而是软件概念上的端口。服务器可以向外提供多种服务,比如,一台服务器可以同时是WEB服务器,也可以是FTP服务器,同时,它也可以是邮件服务器。为什么一台服务器可以同时提供那么多的服务呢?其中一个很主要的方面,就是各种服务采用不同的“端口”来分别提供不同的服务,比如:HTTP(超文本传送)采用80端口,FTP(文件传输)采用21端口,Telnet(远程登陆)采用23端口,POP3(邮件接收)采用110端口,SMTP(简单邮件传送)采用25端口,DNS(域名解析服务)采用53端口等。这样,通过不同端口,计算机与外界进行互不干扰的通信。可以这样说:端口是计算机与外部通信的途径,没有它,计算机便又聋又哑。如果把计算机比成一个餐厅的话,那端口就是一个个卖饭的窗口。
我们都知道餐厅里的窗口大都有详细的分工,要买馒头跑到卖鸡蛋汤的窗口前肯定是买不到的。如果要想和在餐厅工作的MM见见面,说说话,要通过哪个窗口呢?卖汤、卖菜、卖馍的窗口显然是不现实的。好在计算机这个“大”的餐厅有非常多的窗口,并且绝大多数都不常用,只要随便一个(当然要避免卖汤、卖菜、卖馍的窗口)就可以和MM交流了。计算机中总共有256×256即65536个端口(编号从0到65535),其中前1024个端口都有确切的定义,它们对应着因特网上常见的一些服务。1024号以后的端口是为应用程序保留的,可以随意选用(易语言中限32767以下)。这也提醒我们,在为数据报控件(包括以后的客户、服务器控件)指定端口属性时,尽量取较大的数值,以免冲突。[注:其实端口也不是特别的重要,只要能保证发送数据一方和接收数据一方都知道对方的端口即可。这就象餐厅外的GG和餐厅内的MM见面,通过哪一个窗口见面并不重要,重要的是他们去了同一个窗口。]二、数据报的重要方法发送数据功能:发送数据到指定主机上的指定端口。语法:数据报名称.发送数据([接收主机地址],接收主机端口号,欲发送数据)参数:接收主机地址——文本型,可以为主机名、IP地址等。如果省略本参数或者提供空文本,则在指定端口广播欲发送数据。接收主机端口号——整数型,必须是对方(接收主机)数据报控件的端口属性指定的数值。欲发送数据——欲发送的数据,可以是文本型、整数型、小数型、逻辑型、日期时间型等(
数据类型不限)。返回值:逻辑型。如果数据发送成功,返回真;如果发送失败,返回假。应用实例:1、数据报1.发送数据( 127.0.0.1,19730,123)2、数据报1.发送数据(“liigo”,19730,“易语言”)//实例1:向IP地址为127.0.0.1的主机19730端口发送整数型数据123;//实例2:向主机名为“liigo”的主机19730端口发送文本数据“易语言”;//通过语法介绍和应用实例,我们看到,要向对方发送数据,需要指定对方的主机地址和端口号。这有点类似写信要指定收信人地址和收信人姓名(如果不写或写错是邮不到的)。也许您仍然要问,数据究竟发送给谁了呢?答:发送给了另一个程序中的另一个数据报控件,这个程序必须是运行在指定主机上(IP地址为127.0.0.1,或主机名为“liigo”),这个数据报控件的端口属性必须是指定值(19730)。如果没有满足条件的接收对象,自然就不会有谁收到数据——这跟写信也很类似。[注意:本方法的逻辑型返回值只是标志“发送”数据的成功与否,与数据能不能成功“到达”没有任何关系。事实上,数据报控件只管发送数据,而对数据是否到达毫不过问。这就是前面说的它的“不可靠性”。]取回数据功能:取回数据报控件所接收到的数据。语法:数据报名称.取回数据()返回值:字节集型。注意是字节集型,使用时经常需要进行数据类型转换。应用实例:1、x=数据报1.取回数据() //取回数据并存入字节集型变量x中编辑框1.内容=从字节集转换(x,#文本型) //显示到编辑框1中//“从字节集转换(x,#文本型)”表示将字节集
型变量x转换成文本型(第二个参数“#文本型”指定目标数据类型,“#文本型”是易语言系统定义的常量)。//[注:您可能非常熟悉“到文本()”函数了,但它只能将整数型、逻辑型、日期时间型转换成文本型,并不能转换字节集型。字节集是比较特殊的数据类型,易语言专门提供了针对它的类型转换函数“从字节集转换()”和“转换为字节集()”。]//上述实例也可合写到一行中:“编辑框1.内容=从字节集转换(数据报1.取回数据(),#文本型)”。//注意“取回数据”方法只能在数据报控件的“数据到达”事件的处理子程序中调用。在其它地方即使调用了也取不到正确的数据。[补充:您可能正在感到奇怪,为什么非要返回字节集型的值呢,使用时还要多一步转换,直接返回文本型多好!答:因为在所有数据类型中,只有字节集型最具有通用性。比如要传递的是一张图片数据,除字节集外,其它数据类型都不合适。]三、数据报的重要事件数据到达事件的产生时机:当有数据到达时自动产生此事件。在本事件的处理子程序中,一个最重要的任务就是取回“到达的数据”——通过“取回数据()”方法。还得再提醒您一次,“取回数据()”返回的是字节集型的数据,通常需要用数据类型转换函数“从字节集转换()”将字节集数据转换为其它数据类型(最常用的数据类型无疑是文本型)。我写了一个使用数据报控件进行网络聊天的程序。在已经连网的任意两台机器上分别运行该程序,指定对方机器的IP地址或主机名之后,就能互相对话了。(如果在单机上测试,则自己发的信息自己收到。)Ⅱ- 客户、服务器