admin 管理员组文章数量: 887031
2023年12月24日发(作者:these用汉语怎么说)
易语言“数据报、客户、服务器 ”
易语言“数据报、客户、服务器 ”
━━━━━━━━━━━━━━━━━━━━━━━━━━这是三个典型的网络控件,写网络程序少不了它们。通过网络交互数据,首先要明白“连接”和“无连接”的概念。最简单的例子莫过于打电话和写信。两个人如果要通电话,得首先建立连接——即拨号,等待对方应答后才能相互传递信息,最后还要释放连接——即挂电话。写信就没有那么复杂了,地址姓名填好以后直接往邮筒一扔,收信人就能收到。用数据报控件进行数据交互,类似于写信,是基于“无连接”的;用客户、服务器进行数据交互,类似于打电话,是基于“连接”的。根据提供服务类型的不同,端口分为两种,一种是TCP端口,一种是UDP端口。计算机之间相互通信的时候,分为两种方式:一种是发送以后就不管了,不去确认信息是否到达,这种方式大多采用UDP协议(我们熟悉的OICQ就是采用这种协议);一种是发送信息以后,可以确认信息是否到达,也就是有应答的方式,这种方式大多采用TCP协议。(这两种交互方式分别类似于生活中的写信和打电话。)在易语言中,用数据报控件封装了UDP协议,用客户控件和服务器控件封装了TCP协议。Ⅰ- 数据报
------------------------数据报是一种不可靠、小数据量的网络数
据交互方式。如果传递的数据量过大,有可能会失败,最好不要超过 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地址或主机名之后,就能互相对话了。(如果在单机上测试,则自己发的信息自己收到。)Ⅱ- 客户、服务器
--------------------------------------客户控件和服务器控件是一对好搭挡。它们总是成对使用,分处于两个独立的应用程序中,一个充当客户端,一个充当服务器端。客户端的应用程序总是向服务器提出服务请求,而服务器端的应用程则根据客户端的请求提供服务。可以说客户端是主动方,服务器端是被动方。(当然也可以在一个应用程序中既使用客户控件,又使用服务器控件,这样它即充当客户端又充当服务器端。)您可能听说过(甚至用过)国内著名的木马——冰河,它就是一个典型的客户服务器软件。该软件其实是两个程序(一个客户端,一个服务器端),通过各种途径让服务器端在欲监示的机器上运行后,就可以在客户端向服务器端程序发送指令,以达到操纵对方机器的目的。我最后将提供一个用易语言编写的简单的类似例程。千万不要把客户服务器软件跟黑客、木马直接联系起来,它还有很多“正道”上的用途。您在电视上见过某老总在办公室里操纵家里的电脑吗?他用的那个软件就是客户服务器软件,这能叫木马吗?他的行动
是黑客行动吗?显然不是的。(他用的软件还说不定就是某个著名的木马,但这至少说明木马不一定完全是骇客们搞破坏的工具,也可以为民造福,关键看怎么用它——同样是刀,凶手可以用来杀人,橱师却可以用来做菜,刀本身并没有过错。)一、客户的重要属性客户控件没有重要属性。二、客户的重要方法连接功能:连接到指定主机上的指定端口。语法:客户名称.连接(服务器地址,服务器端口号)参数:服务器地址——文本型,可以为主机名、IP地址;服务器端口号——整数型,即服务器控件的端口属性指定的值。应用实例:1、客户1.连接(110.0.0.1, 19730) //与IP地址为110.0.0.1的主机中的服务器控件进行连接。该服务器控件的属性必须是19730,且它所在的程序正在运行,否则连接不可能成功。注意:同一时刻,一个客户控件只能连接一个服务器控件;一个服务器控件可以同时跟多个客户控件连接。断开连接功能:断开与服务器的连接。语法:客户名称.断开连接()应用实例:1、客户1.断开连接()发送数据功能:向已经建立连接的服务器控件发送数据。语法:客户名称.发送数据(数据)参数可以是各种类型的数据。应用实例:1、客户1.发送数据(0) 2、客户1.发送数据(编辑框1.内容) 3、客户1.发送数据(图片框1.图片) //分别向服务器发送整数、文本、字节集数据。
[注:必须先跟服务器控件正确建立连接之后,才能发送数据。这就像和朋友打电话,您要先播号,待朋友应答后再讲话
——如果没播号,或那边朋友还未拿起话筒,您就开始讲话,不是白讲吗?]取回数据功能:取回服务器发送来的数据。语法:客户名称.取回数据()本方法返回字节集型的数据。使用时有可能需要进行数据类型转换(用“从字节集转换()”函数),这跟数据报控件的“取回数据”方法是完全一致的。三、客户的重要事件数据到达当服务器端将数据发送过来后产生本事件。在本事件的处理子程序中调用“取回数据()”方法即可取回本次所收到的数据。连接断开当连接被服务器端断开后会产生本事件。连接断开后,不能继续发达数据,除非重新建立连接。〓★〓 客户与服务器的交互:1、首先由客户控件建立与服务器控件的连接(通过调用“连接()”方法),这时服务器控件产生“客户进入”事件,并在该事件中获得客户的地址(通过调用“取回客户()”方法)。此后双方可以互相发送、接收数据。2、客户和服务器控件都可以在连接断开之前 的任何时间调用“发送数据()”方法向对方发送数据,此时对方产生“数据到达”事件。在“数据到达”事件中调用“取回数据()”方法即可取得对方发送来的数据。3、客户控件可调用“断开连接()”方法断开与服务器控件的连接,此时服务器控件产生“客户离开”事件;服务器控件可调用“断开客户()”方法断开与客户控件的连接,此时客户控件产生“连接断开”事件。一、服务器的重要属性端口整数型,指定监听数据到达的端口号,可以是大于 0 小于 32767 的任何自定数值。(应尽量取大
于1024的较大值。)其含义与数据报控件的同名属性类似。二、服务器的重要方法取回客户功能:取回与服务器连接的客户地址。语法:服务器名称.取回客户()本方法返回一个文本型的值,其中记录了客户的地址(IP地址 + 端口)。当服务器控件向客户发送数据或断开客户时,都需要指定该地址。应用实例:1、客户地址=服务器1.取回客户 //取回客户的地址,并保存到文本型变量“客户地址”中。“客户地址”要事先定义为全局变量或程序集变量,以供其它子程序使用。[注:通常在服务器控件的“客户进入”或“客户离开”(特别是“客户进入”)事件的处理子程序中调用本方法。]取回数据功能:取回客户发送来的数据。语法:服务器名称.取回数据()返回值为字节集型。发送数据功能:向指定客户发送数据。语法:服务器名称.发送数据(接收客户,数据,[最长等待时间])参数:客户地址——文本型,必须是调用“取回客户”方法获得的客户地址。数据——可以是各种类型的数据。最长等待时间——指定等待发送成功的最长时间,单位为秒。如果省略本参数,默认为无限等待。应用实例:1、服务器1.发送数据(客户地址,123,) //向发送整数型数据123。这里的“客户地址”就是前面调用“取回客户()”时的返回值。断开客户功能:与指定客户断开连接。语法:服务器名称.断开客户(欲断开客户)参数必须是调用“取回客户()”方法所返回的客户地址文本。应用实例:1、服务器1.断开客户(客户地址) //与“客户
地址”所指定的客户断开连接。这里的“客户地址”就是前面调用“取回客户()”时的返回值。三、服务器的重要事件数据到达当服务器端将数据发送过来后产生本事件。在本事件的处理子程序中调用“取回数据()”方法即可取回本次所收到的数据。客户进入当有新客户连接入本服务器控件后产生本事件。本事件的事件处理子程序的一个重要的任务就是:调用“取回客户()”方法获得新客户的地址,并保存到文本型的全局变量或程序集变量中,供以后使用(服务器控件的方法“发送数据()”“断开客户()”都需要指定客户的地址)。客户离开当有已连接客户断开与本服务器组件的连接后,会产生本事件。在本事件的处理子程序中调用“取回客户”方法即可取回此客户的地址(IP地址 + 端口)。客户与服务器的关系:一般情况下客户是主动者,是指令的发布者;服务器是被动者,是指令的执行者。仍以“木马”为例来解说:服务器端潜伏于某机器中,随时等待客户端与它建立连接。一旦连接成功,则客户端向服务器端发布指令(“发送数据”),服务器端接收到指令后执行相关程序语句,然后将执行结果发送到客户端,这就完成了一个交互。我给大家提供三个例程。第一个例程是一个简单的网络聊天程序(客户服务器版),演示了客户与服务器最基本的交互;第二个例程,是一个“木马”的雏形,演示怎样做木马程序;第三个例程是“网络朋友”——一个网络交流程序,将例程二的客户端、服务器端合二为一,程序即
可以是客户端也可以是服务器端(便于双向交流),功能上综合了前两个例程的功能且又有所扩展,能够互相聊天、互相发送文件和图片、能够互相截取对方屏幕图片,能够在对方机器上弹出信息框(如:严重警告!你的机子已被我黑掉了!哈哈……),也能够互相关闭或重启对方机器。
版权声明:本文标题:易语言“数据报、客户、服务器 ” 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/free/1703358338h448316.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论