易语言吧 关注:266,058贴子:1,663,091

[教程/探讨向]在易语言内各窗口的消息沟通

取消只看楼主收藏回复



IP属地:广东1楼2019-02-12 13:44回复
    2L备用


    IP属地:广东2楼2019-02-12 13:44
    收起回复
      首先说一下发这个帖子的初衷:
      当我还在初步学习易语言的时候 , 在贴吧上发了很多笨拙的软件..
      在开发的过程中 , 遇到了很多问题
      现在我已经学习了更多的编程知识 , 已经能轻松解决我当初学习易语言时难以解决或者不能完美解决的问题了
      所以现在将这些宝贵的经验分享给大家,让大家在学习易语言的路上少走弯路


      IP属地:广东4楼2019-02-12 16:30
      收起回复
        在开始之前,先给大家普及一下要用到的网络知识:
        1.在每台带有网卡的计算机中 , 会有一个系统内嵌的本地网络 即 127.0.0.1 (localhost) 就是我们常说的本地主机 , 我们可以在这台机器上打开 0 - 32767 范围之间的所有端口进行互相通信
        2.Socket通信
        网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
        简单通俗的讲 , Socket 通信就是打开一个端口,利用这个端口为另外 N 个端口发送/接收数据常用的协议是 TCP(在易语言中是 服务器 \ 客户 组件)/UDP (在易语言中是 数据报 和数据报提供者中)
        TCP和UDP的较大区别:
        TCP包发包到 , 即发送一个数据报后,需要确定对方完整地接收到了之后再开始发送下一个,具有更好的安全性,在程序运行时也不容易出错 , 一般软件之间的通信用的就是这种协议 , 本帖也以 TCP 协议的Socket传输为主
        UDP是只管发不管到 , UDP 只管一直发送数据,不检查对方主机接收的完整性 , 所以数据包在中途被拦截 , 或者因为某种原因导致对方主机无法完整接收时 , 可能导致程序出现问题 现对于TCP的优点就是 速度快 适合需要小延迟和对安全性要求不高的程序 例如:游戏
        TCP协议向下兼容UDP协议 而 UDP 协议不兼容 TCP 协议


        IP属地:广东6楼2019-02-12 16:56
        回复
          如果你听不懂6楼在说啥?
          没关系 , 这玩意儿说的复杂实现起来简单的很
          我们只需要用到易语言的两个组件 (TCP协议)
          服务器 和 客户
          这两个是易语言自带的,在 "系统核心支持库中"


          IP属地:广东7楼2019-02-12 16:59
          回复
            我们首先在同一个窗口中尝试通信:
            如图 , 在 组件栏中找到服务器和客户 添加到窗口中
            然后为 服务器 组件指定一个端口号 这里我设置为 6666 (当然你也可以 使用默认的端口号19730)


            IP属地:广东8楼2019-02-12 17:09
            回复
              然后开始写代码:
              双击窗口空白部分转跳到 "__启动窗口_创建完毕" 子程序
              然后写入以下代码:


              IP属地:广东9楼2019-02-12 17:16
              回复
                易语言的 "服务器" 组件有三个回调函数 分别是:
                数据到达 客户进入 客户离开
                这三个很好理解




                IP属地:广东11楼2019-02-12 17:31
                回复
                  查看运行效果:


                  IP属地:广东12楼2019-02-12 17:32
                  回复
                    接着写给服务器发送数据的部分:


                    IP属地:广东14楼2019-02-12 17:36
                    收起回复
                      单窗口通信的例程到到这里就写完了,卤煮先去吃饭,晚上更新
                      回车前:

                      回车后:


                      IP属地:广东15楼2019-02-12 17:38
                      回复
                        我回来继续更新了


                        IP属地:广东16楼2019-02-12 19:59
                        回复
                          在理解服务器和客户的用法之后 , 多窗口的版本如下:


                          IP属地:广东17楼2019-02-12 20:10
                          回复
                            多窗口版本的源码我直接发到百度网盘里
                            源码里的注释已经写得很详细了
                            就不再赘述


                            IP属地:广东18楼2019-02-12 20:11
                            回复
                              如果不想用服务器和窗口组件,可以用易语言自带的两个类来代替:
                              在网络通讯支持库中的:
                              网络服务器 和 网络客户端
                              这两个的好处就是在使用时不需要端口,而且相比服务器和客户组件功能更多,可拓展性更强,支持 同步/异步 发送,性能更好,速度更快


                              IP属地:广东19楼2019-02-12 20:22
                              收起回复