
易于使用的语言“数据报,客户端,服务器”易于使用的语言“数据报,客户端,服务器”这是三种典型的网络控件,对于编写网络程序而言,它们是必不可少的. 要通过网络交换数据,我们必须首先了解“已连接”和“无连接”的概念. 最简单的示例是调用和写入. 如果两个人想通过电话交谈,则必须首先建立连接-即拨号,等待对方应答后才能彼此通信,最后释放连接-即挂断电话. 写一封信并不那么复杂. 填写地址和名称后,将其直接放入帖子中,收件人将收到它. 使用数据报控件进行数据交互类似于编写字母,并且基于“无连接”. 使用客户端和服务器进行数据交互类似于拨打电话,并且基于“连接”. 根据提供的服务类型的不同,端口分为两种,一种是TCP端口,另一种是UDP端口. 当计算机彼此通信时,有两种方法: 一种是在发送之后忽略它,并且不确认信息是否到达. 此方法主要使用UDP协议(熟悉的OICQ使用此协议);一个发送完信息后,可以确认信息是否到达,即有一种响应方法,该方法主要使用TCP协议. (这两种交互方法类似于在生活中写信和拨打电话. )在简单的语言中,UDP协议封装有数据报控件,而TCP协议封装有客户端控件和服务器控件.
Ⅰ-数据报------------------------数据报是一种不可靠的,少量的网络数据交互方法. 如果传输的数据量太大,则可能会失败,最好不要超过127个字节. 如果您需要大量数据或可靠的数据传输方法,请使用基于连接的其他网络组件(例如客户端和服务器). 尽管通过数据报控件传输的数据量很小且不可靠,但是它简单易用,并且在对数据量和可靠性没有特殊要求时,可以在某些区域充分发挥作用. 最后,我将使用此控件将例程作为网络聊天程序(数据报告版本). 数据报的重要属性是: 端口. 数据报的重要方法是: 发送数据(),检索数据(). 数据报的重要事件是: 数据到达. 1.数据报的重要属性Port Port属性是一个整数值,默认值为19730. 如果要更改它,请尝试选择一个大于1024的较大值. Port是一个非常重要的概念. 首先要了解的是,我们在这里谈论的端口不是计算机硬件的I / O端口,而是软件概念中的端口. 该服务器可以向外界提供多种服务. 例如,服务器可以同时是WEB服务器或FTP服务器,也可以是邮件服务器. 为什么服务器可以同时提供这么多服务?主要方面之一是各种服务使用不同的“端口”来提供不同的服务,例如: HTTP(超文本传输)使用端口80,FTP(文件传输)使用端口21,Telnet(远程登录)它使用端口23, POP3(邮件接收)使用端口110,SMTP(简单邮件传输)使用端口25,DNS(域名解析服务)使用端口53.

通过这种方式,计算机和外界可以通过不同的端口相互通信而不会受到干扰. 可以说,端口是计算机与外界通信的一种方式. 没有它,电脑就聋哑. 如果将计算机与餐厅进行比较,则该端口是出售餐点的窗口. 众所周知,餐厅的大多数窗户都有详细的分工. 如果您想购买steam头并奔向卖鸡蛋汤的橱窗,那您肯定无法购买. 如果您想与在餐厅工作的MM见面并交谈,您应该经过哪个窗口?卖汤,蔬菜和steam头的窗户显然是不现实的. 幸运的是,带计算机的“大”餐厅有很多窗户,其中大多数都不常用. 只需找到一个即可与MM交流(当然,要避开出售汤,蔬菜和steam头的窗户). 计算机中总共有256×256或65536个端口(从0到65535编号),其中前1024个端口具有确切的定义,这些定义与Internet上的某些常见服务相对应. 1024之后的端口是为应用程序保留的,可以随意选择(低于32767的简单语言限制). 这也提醒我们在为数据报控件(包括将来的客户端和服务器控件)指定端口属性时易语言服务器与客户端,请尝试采用更大的值以避免冲突. [注: 实际上,端口并不特别重要,只要它可以确保发送方和接收方都知道另一方的端口. 就像在餐厅外遇到GG在餐厅内遇到MM. 遇到哪个窗口都没关系,它们进入同一窗口很重要.
]第二,数据报发送数据功能的重要方法: 将数据发送到指定主机上的指定端口. 语法: 数据报名称. 发送数据([接收主机地址],接收主机端口号,要发送数据)参数: 接收主机地址-文本类型,可以是主机名易语言服务器与客户端,IP地址等. 如果省略此参数或提供空文本,则要发送的数据在指定端口上广播. 接收方主机整数类型的端口号必须是另一方(接收方主机)的数据报控件的端口属性指定的值. 要发送的数据-要发送的数据可以是文本类型,整数类型,十进制类型,逻辑类型,日期时间类型等(数据类型不受限制). 返回值: 逻辑. 如果数据发送成功,则返回true;否则,返回true. 如果失败,则返回false. 应用示例: 1.数据报1.发送数据(127.0.0.1,19730,123)2.数据报1.发送数据(“ liigo”,19730,“简易语言”)//示例1: IP地址为127.0 .0.1的主机19730端口发送整数数据123; //示例2: 将文本数据“ easy language”发送到主机名为“ liigo”的主机19730端口; //通过语法和应用程序示例的介绍,我们看到要向另一方发送数据,您需要指定另一方的主机地址和端口号. 这类似于写一封信以指定收件人的地址和收件人的姓名(如果您没有写信或遇到错误,则无法通过邮寄方式得到它).
也许您仍然要问,数据发送给了谁?答: 发送到另一个程序中的另一个数据报控件. 该程序必须在指定的主机(IP地址为127.0.0.1,或主机名为“ liigo”)上运行. 此数据报控件的端口属性必须为是指定值(19730). 如果没有满足条件的接收对象,自然不会有人接收数据-这与写信非常相似. [注: 此方法的逻辑返回值仅表示“发送”数据成功,与是否可以成功“到达”数据无关. 实际上,数据报控件只是发送数据,而无需询问数据是否到达. 这就是前面提到的“不可靠性”. ]检索数据功能: 检索由数据报控件接收的数据. 语法: 数据报名称. 检索数据()返回值: 字节集类型. 请注意,它是一个字节集类型,通常需要数据类型转换. 应用示例: 1. x =数据报告1.检索数据()//检索数据并将其存储在编辑框中的字节集变量x中. 1.内容=从字节集转换(x,#text类型)//在编辑框中显示1 //“从字节集(x,#text类型)转换”是指将字节集变量x转换为文本类型(第二个参数“ #text type”指定目标数据类型,“#Text”是由简单的语言系统). // [注意: 您可能熟悉“ to text()”函数,但是它只能将整数,逻辑和日期时间类型转换为文本类型,而不能转换字节集类型.
字节集是一种特殊的数据类型. 彝语提供了类型转换功能“从字节集转换()”和“转换为字节集()”. ] //上面的示例也可以写成一行: “编辑框1.内容=从字节集转换(数据报1. 检索数据(),#text类型)”. //注意,“检索数据”方法只能在数据报控件的“数据到达”事件的处理子例程中调用. 即使在其他地方调用,也无法获得正确的数据. [补充: 您可能想知道为什么必须返回字节集类型值,并且在使用它时需要再转换一步,然后直接返回文本类型. 有多好!答: 由于所有数据类型,只有字节集类型才是最通用的. 例如,如果要传输图像数据(字节组除外),则其他数据类型不合适. ]第三,数据报的重要事件数据到达事件的时间: 数据到达时自动生成此事件. 在此事件的处理子例程中,最重要的任务之一是通过“ retrieve data()”方法来检索“到达的数据”. 您必须再次提醒您,“检索数据()”返回字节集数据,通常需要使用数据类型转换函数“从字节集()转换”将字节集数据转换为其他数据类型(最常见的是使用的数据类型无疑是文本类型). 我编写了一个使用数据报控件聊天的程序. 在连接到网络的任何两台计算机上运行该程序,并指定另一台计算机的IP地址或主机名,然后您就可以互相交谈.
(如果在单台计算机上进行测试,您将收到自己发送的信息. )Ⅱ-客户端,服务器----------------------- --------------客户端控制和服务器控制是很好的一对. 它们始终在两个独立的应用程序中成对使用,一个充当客户端,另一个充当服务器. 客户端应用程序始终向服务器发出服务请求,并且服务器应用程序根据客户端的请求提供服务. 可以说,客户端是主动方,服务器是被动方. (当然,您还可以在应用程序中同时使用客户端控件和服务器控件,这样它既可以充当客户端又可以充当服务器. )您可能听说过(甚至使用过)著名的家用Trojan-Glacier,它是典型的客户端服务器软件. 该软件实际上是两个程序(客户端和服务器). 在服务器通过各种方法在要监视的机器上运行之后,客户端可以向服务器程序发送指令以控制另一方. 机器的目的. 我最终将提供一个用简单语言编写的简单类似例程. 不要将客户端服务器软件直接与黑客和木马程序连接. 它还具有许多“正确的使用方式”. 您是否曾经在电视上看到过经理在办公室在家中操纵计算机的情况?他使用的软件是客户端服务器软件. 可以称为木马吗?是他的行为黑客吗?显然不是.
(他使用的软件可能是著名的木马,但这至少表明木马不一定是黑客销毁的工具,它也可以使人们受益. 关键是如何使用它-刀子也一样,凶手可以用来杀人,但内阁厨师可以用来做饭,刀本身没有错. )首先,客户的重要属性客户控制没有重要的属性. 二,客户连接功能的重要方法: 连接到指定主机上的指定端口. 语法: 客户名称. 连接(服务器地址,服务器端口号)参数: 服务器地址文本类型,可以是主机名,IP地址;服务器端口号-整数类型,它是服务器控件的port属性指定的值. 应用示例: 1.客户端1.连接(110.0.0.1,19730)//与IP地址为110.0.0.1. 的主机中的服务器控件连接. 服务器控件的属性必须为19730,并且该控件所在的程序正在运行,否则连接无法成功. 注意: 一次客户端控件只能一次连接到一个服务器控件. 一个服务器控件可以同时连接到多个客户端控件. 断开连接功能: 与服务器断开连接. 语法: 客户名称. Disconnect()应用程序示例: 1,客户1. Disconnect()发送数据功能: 将数据发送到已建立连接的服务器控件. 语法: 客户名称. 发送数据(数据)参数可以是各种类型的数据.
应用示例: 1.客户端1.发送数据(0)2.客户端1.发送数据(编辑框1.内容)3.客户端1.发送数据(图片框1.图片)//分别发送到服务器整数,文本,字节集数据. [注意: 发送数据之前,您必须首先与服务器控件正确建立连接. 就像给朋友打电话一样. 您必须先拨打电话号码,然后在朋友回答后说—如果尚未拨打电话号码,或者如果那里的朋友没有拿起麦克风,那么您就开始讲话了,不是吗? ]检索数据功能: 检索从服务器发送的数据. 语法: 客户名称. 检索数据()此方法返回字节集数据. 使用它时,可能需要执行数据类型转换(使用“从字节集转换为()”功能),这与数据报控件的“检索数据”方法完全一致. 3.客户的重要事件数据到达. 服务器发送数据时会生成此事件. 在此事件的处理子例程中调用“检索数据()”方法以检索这次接收的数据. 断开连接当服务器断开连接时,将生成此事件. 断开连接后,除非重新建立连接,否则无法开发数据. 〓★〓客户端与服务器之间的交互: 1.首先,客户端控件与服务器控件建立连接(通过调用“ connect()”方法),然后服务器控件生成“客户端条目”事件,并且通过调用“获取客户()”方法获取事件地址中的客户.
此后,双方可以相互发送和接收数据. 2.客户端和服务器控件都可以在断开连接之前的任何时间调用“发送数据()”方法以将数据发送到另一方. 此时,另一方生成“数据到达”事件. 在“数据到达”事件中,调用“检索数据()”方法以获取另一方发送的数据. 3.客户端控件可以调用“ disconnect()”方法断开服务器控件的连接,并且服务器控件生成“客户端离开”事件;服务器控件可以调用“ disconnect client()”方法来断开客户端控件的Connection,该客户端控件生成一个“ disconnected”事件. 1.服务器的重要属性端口整数类型,用于指定侦听数据到达的端口号,可以是大于0且小于32767的任何自定义值. (应尽可能使用大于1024的更大值. )它的含义类似于数据报控件的相同名称的属性. 其次,服务器检索客户端功能的重要方法: 检索连接到服务器的客户端地址. 语法: 服务器名称. 检索客户端()此方法返回一个文本值,该值记录客户端的地址(IP地址+端口). 当服务器控件将数据发送到客户端或断开客户端的连接时,需要指定地址. 应用示例: 1.客户地址=服务器1.检索客户//检索客户的地址并将其保存在文本变量“客户地址”中. 必须事先将“客户地址”定义为全局变量或汇编变量,以供其他子程序使用.
[注意: 通常在服务器控件的“客户端输入”或“客户端离开”(特别是“客户端输入”)事件的处理程序子例程中调用此方法. ]检索数据功能: 检索客户发送的数据. 语法: 服务器名称. 检索data()的返回值是字节集类型. 发送数据功能: 向指定客户发送数据. 语法: 服务器名称. 发送数据(接收客户端,数据,[最长等待时间])参数: 客户端地址文本类型,必须是通过调用“检索客户端”方法获得的客户端地址. 数据可以是各种类型的数据. 最大等待时间-指定等待成功传输的最长时间,以秒为单位. 如果省略此参数,则默认为无限等待. 应用示例: 1.服务器1.发送数据(客户端地址123,)//将整数数据123发送至. 这里的“客户地址”是上次调用“获取客户()”的返回值. 断开客户功能: 断开与指定客户的连接. 语法: 服务器名称. 断开客户机(断开客户机)参数必须是通过调用“检索客户机()”方法返回的客户机地址文本. 应用示例: 1.服务器1.断开客户端(客户端地址)//断开由“客户端地址”指定的客户端. 这里的“客户地址”是先前调用“获取客户()”时的返回值. 第三,服务器的重要事件数据到达此事件在服务器发送数据时发生. 在此事件的处理子例程中调用“检索数据()”方法以检索这次接收的数据.
客户端条目当新的客户端连接到服务器控件时,将生成此事件. 此事件的事件处理子例程的重要任务是: 调用“获取客户()”方法以获得新客户的地址,并将其保存到文本类型的全局变量或程序集变量中,以备后用(服务器控制). 方法“发送数据()”,“断开客户()”需要指定客户的地址). 当客户端离开时,当连接的客户端断开服务器组件的连接时,将生成此事件. 在事件处理子例程中调用“获取客户”方法以获取客户的地址(IP地址+端口). 客户端与服务器之间的关系: 通常,客户端是指令的主动人和发布者;服务器是被动的人,是指令的执行者. 仍以“木马”为例进行说明: 服务器端潜伏在计算机中,等待客户端随时与其建立连接. 一旦连接成功,客户端就会向服务器发出一条指令(“发送数据”). 服务器收到指令后,执行相关的程序语句,然后将执行结果发送给客户端. 这样就完成了交互. 我为您提供了三个例程. 第一个例程是一个简单的网络聊天程序(客户端服务器版本),该程序演示了客户端和服务器之间最基本的交互. 第二个例程是“木马”的原型,演示了如何进行木马. 第三,该例程是“网络朋友”-一种将例程的客户端和服务器合并为一个的网络通信程序. 该程序可以是客户端或服务器(以促进双向通信),它们在功能上是全面的. 前两个例程的功能已得到扩展和扩展. 他们可以彼此聊天,彼此发送文件和图片,可以拦截彼此的屏幕图片,并且可以在对方机器上弹出消息框(例如: 严重警告!您的机器已被我入侵!哈哈...),也可以关闭或重新启动彼此的计算机.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-200086-1.html
你也看球