服务端是用易语言编写,建立TCP服务器在固定端口进行监听,界面如图:

.版本 2
.支持库 iext
.支持库 spec

.程序集 窗口程序集_启动窗口

.子程序 _服务器1_客户进入
.局部变量 未处理数据, 文本型
.局部变量 已处理数据, 文本型, , "0"
.局部变量 x2, 整数型
.局部变量 i, 整数型

未处理数据 = 服务器1.取回客户 ()
已处理数据 = 分割文本 (未处理数据, “:”, )
x2 = 超级列表框1.插入表项 (, , , , , )
超级列表框1.置标题 (x2, 0, 已处理数据 [1])
超级列表框1.置标题 (x2, 1, 已处理数据 [2])
编辑框1.加入文本 (到文本 (取现行时间 ()) + “ ” + “来自:” + 已处理数据 [1] + “的消息:” + #换行符 + “已连接服务器” + #换行符)


.子程序 _服务器1_客户离开
.局部变量 未处理数据, 文本型
.局部变量 已处理数据, 文本型, , "0"
.局部变量 i, 整数型

服务器1.取回客户 ()
未处理数据 = 服务器1.取回客户 ()
已处理数据 = 分割文本 (未处理数据, “:”, )
.计次循环首 (超级列表框1.取表项数 (), i)
    .如果 (超级列表框1.取标题 (i - 1, 1) = 已处理数据 [2])
        超级列表框1.删除表项 (i - 1)
        编辑框1.加入文本 (到文本 (取现行时间 ()) + “ ” + “来自:” + 已处理数据 [1] + “的消息:” + #换行符 + “已断开服务器” + #换行符)
    .否则

    .如果结束

.计次循环尾 ()



.子程序 _服务器1_数据到达
.局部变量 data, 文本型
.局部变量 未处理数据, 文本型
.局部变量 已处理数据, 文本型, , "0"
.局部变量 i, 整数型
.局部变量 a, 文本型, , "0"

未处理数据 = 服务器1.取回客户 ()
已处理数据 = 分割文本 (未处理数据, “:”, )
data = 到文本 (服务器1.取回数据 ())
调试输出 (data)
.判断开始 (data = “ssdk”)
    .计次循环首 (超级列表框1.取表项数 (), i)
        .如果 (超级列表框1.取标题 (i - 1, 1) = 已处理数据 [2])
            超级列表框1.置标题 (i - 1, 2, “宿舍灯控”)

        .否则

        .如果结束

    .计次循环尾 ()
.判断 (data = “APP”)
    .计次循环首 (超级列表框1.取表项数 (), i)

        .如果 (超级列表框1.取标题 (i - 1, 2) = “宿舍灯控”)
            服务器1.发送数据 (服务器1.取回客户 (), “回执信息” + “||” + “灯控:” + 超级列表框1.取标题 (i - 1, 0) + “目前在线”, 5000)
        .否则

        .如果结束

        .如果 (超级列表框1.取标题 (i - 1, 1) = 已处理数据 [2])
            超级列表框1.置标题 (i - 1, 2, data)
        .否则

        .如果结束

    .计次循环尾 ()
.判断 (data = “open”)
    .计次循环首 (超级列表框1.取表项数 (), i)

        .如果 (超级列表框1.取标题 (i - 1, 2) = “宿舍灯控”)
            a = 分割文本 (编辑框1.内容, #换行符, )
            .如果 (a [取数组成员数 (a)] = “灯已打开”)

            .否则
                编辑框1.加入文本 (到文本 (取现行时间 ()) + “ ” + “来自:” + 已处理数据 [1] + “的消息:” + #换行符 + “灯已打开” + #换行符)
                服务器1.发送数据 (超级列表框1.取标题 (i - 1, 0) + “:” + 超级列表框1.取标题 (i - 1, 1), “open”, 5000)
            .如果结束


        .否则

        .如果结束

    .计次循环尾 ()

.判断 (data = “close”)
    .计次循环首 (超级列表框1.取表项数 (), i)

        .如果 (超级列表框1.取标题 (i - 1, 2) = “宿舍灯控”)
            a = 分割文本 (编辑框1.内容, #换行符, )
            .如果 (a [取数组成员数 (a)] = “灯已关闭”)

            .否则
                服务器1.发送数据 (超级列表框1.取标题 (i - 1, 0) + “:” + 超级列表框1.取标题 (i - 1, 1), “close”, 5000)
                编辑框1.加入文本 (到文本 (取现行时间 ()) + “ ” + “来自:” + 已处理数据 [1] + “的消息:” + #换行符 + “灯已关闭” + #换行符)

            .如果结束

        .否则

        .如果结束

    .计次循环尾 ()

.默认

.判断结束


.子程序 _时钟1_周期事件
.局部变量 i, 整数型

.计次循环首 (超级列表框1.取表项数 (), i)
    .如果 (超级列表框1.取标题 (i - 1, 2) = “宿舍灯控”)
        服务器1.发送数据 (超级列表框1.取标题 (i - 1, 0) + “:” + 超级列表框1.取标题 (i - 1, 1), “link”, 5000)
    .否则
        i = i + 1
        调试输出 (i)
    .如果结束

.计次循环尾 ()

PS:因为用的是易语言自带的支持库,所以原始的服务器组件是无法在客户进入时获得用户句柄的,所以采用列表框对来访用户进行记录,在写树莓派那边的python端时,我在连接服务器时会发送几个特殊字符,让服务端识别,在列表对IP进行记录时,备注一列写上“宿舍灯控”。在安卓端发信后利用循环遍历列表寻找python端IP进行数据发送。

附上源码链接:


You got to put the past behind you before you can move on.