文章目录
前言
本案例是实现自制手机APP连接远程服务器,同时实现收发数据,发送和接收16进制数据功能;APP的开发是使用了E4A软件软件下载链接,远程服务器使用的是阿里云服务器。
一、使用操作
1. 连接远程服务器
如果没有远程服务器的朋友,可以连接OneNET的服务器试试接入地址
2. 连接本地服务器
如果没有远程服务器的朋友,可以试试连接本地服务器,但前提是在电脑上使用模拟器运行APP,安装在手机上的连接不了。
使用SSCOM开设服务器,本地IP地址默认,端号设置为1234。
二、APP代码
所有的代码如下:
变量 IP地址 为 文本型
变量 端口号 为 整数型
事件 主窗口.创建完毕()
IP地址框.内容 = 读取设置("IP地址")
端口框.内容 = 读取设置("端口号")
结束 事件
事件 图片框_返回.被单击()
返回桌面()
结束 事件
事件 退出标签.被单击()
结束程序()
客户1.断开连接()
结束 事件
事件 连接按钮.被单击()
如果 连接按钮.标题 = "连接" 则
IP地址 = IP地址框.内容
端口号 = 到整数(端口框.内容)
客户1.连接服务器(IP地址,端口号,5000)
连接按钮.标题 = "断开"
否则
客户1.断开连接()
连接按钮.标题 = "连接"
弹出提示("已断开连接")
结束 如果
结束 事件
事件 客户1.连接完毕(连接结果 为 逻辑型)
如果 连接结果 = 真 则
弹出提示("连接成功")
'连接成功后保存信息,下次软件打开读取
保存设置("IP地址",IP地址框.内容)
保存设置("端口号",端口框.内容)
否则
弹出提示("连接服务器失败")
连接按钮.标题 = "连接"
结束 如果
结束 事件
事件 客户1.连接断开()
弹出提示("连接已断开")
连接按钮.标题 = "连接"
结束 事件
事件 发送按钮.被单击()
变量 结果 为 文本型()
变量 计次 为 整数型
变量 数量 为 整数型
变量 aa 为 文本型
变量 bb 为 整数型
变量 cc 为 文本型
变量 dd 为 整数型
变量 ee 为 文本型
如果 发送框.内容="" 则
弹出提示("发送内容不能为空!")
发送框.获取焦点()
否则如果 HEX发送框.选中 则
结果 = 分割文本(发送框.内容," ")
数量 = (取文本长度 (发送框.内容)-((取文本长度 (发送框.内容)+1)/3-1))/2
变量 数据 为 字节型(数量)
变量循环首 计次=0 至 数量-1 步进 1
aa=取文本长度(结果(计次))
如果 aa>2 则
弹出提示("输入错误不是00-FF的十六进制数并且用空格隔开!如:aa bb cc")
否则
cc=取文本中间(结果(计次),0,1)
ee=取文本中间(结果(计次),1,1)
dd=寻找文本("0123456789ABCDEF",到大写(cc),0)
bb=寻找文本("0123456789ABCDEF",到大写(ee),0)
如果 dd=-1 或 bb=-1 则
弹出提示("不是十六进制数请重新输入,并且用空格隔开!如:aa bb cc")
退出
否则
数据(计次)=到整数(到十进制(结果(计次)))
结束 如果
结束 如果
' 弹出提示("发送框输入数据格式错误 16进制模式请用空格隔开!")
变量循环尾
客户1.发送数据(数据) '向服务器发送数据
接收框.内容 = 接收框.内容 & "\n" & "客户端:"& 发送框.内容
否则
客户1.发送数据(文本到字节(发送框.内容,"GBK"))
接收框.内容 = 接收框.内容 & "\n" & "客户端:"& 发送框.内容
结束 如果
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
事件 客户1.收到数据(数据 为 字节型())
变量 aa 为 文本型
变量 bb 为 文本型
变量 i 为 整数型
如果 HEX接收框.选中 则
变量循环首 i = 0 至 取数组下标(数据,1)-1
aa = 取文本右边(到十六进制(数据(i)),2)
bb = bb &" "& 到大写(aa)
变量循环尾
接收框.内容=接收框.内容 & "\n服务器:" & bb
否则
接收框.内容 = 接收框.内容 & "\n服务器:" & 字节到文本(数据,"GBK") '收到服务器发来的字节集数据,转换成文本
结束 如果
接收框.置光标位置(取文本长度(接收框.内容))
结束 事件
事件 清空按钮.被单击()
接收框.内容 = 空
结束 事件
总结
案例自制的APP只能连接公网IP地址,如果是自己电脑开设服务器,一般情况下服务器的地址都是内网IP地址,想要连接内网IP地址,要做到内网穿透才行。
如果是在模拟器上运行APP,那就可以连接电脑的开设的服务器。